app-builder-lib 27.0.0-alpha.6 → 27.0.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/codeSign/mac/macCodeSign.d.ts.map +1 -1
  2. package/dist/codeSign/mac/macCodeSign.js +6 -4
  3. package/dist/codeSign/mac/macCodeSign.js.map +1 -1
  4. package/dist/codeSign/signResult.d.ts +26 -0
  5. package/dist/codeSign/signResult.d.ts.map +1 -0
  6. package/dist/codeSign/signResult.js +12 -0
  7. package/dist/codeSign/signResult.js.map +1 -0
  8. package/dist/codeSign/win/signManager.d.ts +2 -1
  9. package/dist/codeSign/win/signManager.d.ts.map +1 -1
  10. package/dist/codeSign/win/signManager.js.map +1 -1
  11. package/dist/codeSign/win/signtoolBaseSignManager.d.ts +25 -1
  12. package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -1
  13. package/dist/codeSign/win/signtoolBaseSignManager.js +74 -3
  14. package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -1
  15. package/dist/codeSign/win/windowsCodeSign.d.ts +2 -1
  16. package/dist/codeSign/win/windowsCodeSign.d.ts.map +1 -1
  17. package/dist/codeSign/win/windowsCodeSign.js +16 -7
  18. package/dist/codeSign/win/windowsCodeSign.js.map +1 -1
  19. package/dist/codeSign/win/windowsSignAzureManager.d.ts +2 -1
  20. package/dist/codeSign/win/windowsSignAzureManager.d.ts.map +1 -1
  21. package/dist/codeSign/win/windowsSignAzureManager.js +2 -2
  22. package/dist/codeSign/win/windowsSignAzureManager.js.map +1 -1
  23. package/dist/configuration.d.ts +56 -8
  24. package/dist/configuration.d.ts.map +1 -1
  25. package/dist/configuration.js.map +1 -1
  26. package/dist/core.d.ts +5 -0
  27. package/dist/core.d.ts.map +1 -1
  28. package/dist/core.js.map +1 -1
  29. package/dist/fileMatcher.d.ts +15 -0
  30. package/dist/fileMatcher.d.ts.map +1 -1
  31. package/dist/fileMatcher.js +42 -2
  32. package/dist/fileMatcher.js.map +1 -1
  33. package/dist/index.d.ts +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +1 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/indexInternal.d.ts +2 -1
  38. package/dist/indexInternal.d.ts.map +1 -1
  39. package/dist/indexInternal.js +2 -1
  40. package/dist/indexInternal.js.map +1 -1
  41. package/dist/macPackager.d.ts +16 -8
  42. package/dist/macPackager.d.ts.map +1 -1
  43. package/dist/macPackager.js +59 -32
  44. package/dist/macPackager.js.map +1 -1
  45. package/dist/node-module-collector/nodeModulesCollector.d.ts +11 -1
  46. package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
  47. package/dist/node-module-collector/nodeModulesCollector.js +28 -5
  48. package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
  49. package/dist/node-module-collector/pnpmNodeModulesCollector.d.ts.map +1 -1
  50. package/dist/node-module-collector/pnpmNodeModulesCollector.js +3 -1
  51. package/dist/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  52. package/dist/options/PlatformSpecificBuildOptions.d.ts +2 -2
  53. package/dist/options/PlatformSpecificBuildOptions.js.map +1 -1
  54. package/dist/options/SnapOptions.d.ts +8 -4
  55. package/dist/options/SnapOptions.d.ts.map +1 -1
  56. package/dist/options/SnapOptions.js.map +1 -1
  57. package/dist/options/linuxOptions.d.ts +8 -2
  58. package/dist/options/linuxOptions.d.ts.map +1 -1
  59. package/dist/options/linuxOptions.js.map +1 -1
  60. package/dist/options/macOptions.d.ts +18 -8
  61. package/dist/options/macOptions.d.ts.map +1 -1
  62. package/dist/options/macOptions.js.map +1 -1
  63. package/dist/options/pkgOptions.d.ts +1 -1
  64. package/dist/options/pkgOptions.js.map +1 -1
  65. package/dist/options/winOptions.d.ts +8 -7
  66. package/dist/options/winOptions.d.ts.map +1 -1
  67. package/dist/options/winOptions.js.map +1 -1
  68. package/dist/packager.d.ts.map +1 -1
  69. package/dist/packager.js +6 -3
  70. package/dist/packager.js.map +1 -1
  71. package/dist/platformPackager.d.ts +2 -1
  72. package/dist/platformPackager.d.ts.map +1 -1
  73. package/dist/platformPackager.js +5 -3
  74. package/dist/platformPackager.js.map +1 -1
  75. package/dist/publish/PublishManager.js +37 -0
  76. package/dist/publish/PublishManager.js.map +1 -1
  77. package/dist/publish/updateInfoBuilder.d.ts.map +1 -1
  78. package/dist/publish/updateInfoBuilder.js +9 -5
  79. package/dist/publish/updateInfoBuilder.js.map +1 -1
  80. package/dist/targets/linux/FlatpakTarget.d.ts.map +1 -1
  81. package/dist/targets/linux/FlatpakTarget.js +4 -1
  82. package/dist/targets/linux/FlatpakTarget.js.map +1 -1
  83. package/dist/targets/linux/FpmTarget.d.ts +7 -0
  84. package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
  85. package/dist/targets/linux/FpmTarget.js +29 -2
  86. package/dist/targets/linux/FpmTarget.js.map +1 -1
  87. package/dist/targets/linux/appimage/appImageUtil.d.ts +1 -1
  88. package/dist/targets/linux/appimage/appImageUtil.js +3 -3
  89. package/dist/targets/linux/appimage/appImageUtil.js.map +1 -1
  90. package/dist/targets/linux/snap/core24.d.ts +27 -0
  91. package/dist/targets/linux/snap/core24.d.ts.map +1 -1
  92. package/dist/targets/linux/snap/core24.js +92 -57
  93. package/dist/targets/linux/snap/core24.js.map +1 -1
  94. package/dist/targets/mac/MacTargetHelper.d.ts +16 -4
  95. package/dist/targets/mac/MacTargetHelper.d.ts.map +1 -1
  96. package/dist/targets/mac/MacTargetHelper.js +23 -14
  97. package/dist/targets/mac/MacTargetHelper.js.map +1 -1
  98. package/dist/targets/mac/pkg.js +1 -1
  99. package/dist/targets/mac/pkg.js.map +1 -1
  100. package/dist/targets/win/MsiTarget.js +2 -2
  101. package/dist/targets/win/MsiTarget.js.map +1 -1
  102. package/dist/toolsets/7zip.d.ts +32 -0
  103. package/dist/toolsets/7zip.d.ts.map +1 -1
  104. package/dist/toolsets/7zip.js +39 -13
  105. package/dist/toolsets/7zip.js.map +1 -1
  106. package/dist/toolsets/custom.js +4 -2
  107. package/dist/toolsets/custom.js.map +1 -1
  108. package/dist/toolsets/icons.d.ts.map +1 -1
  109. package/dist/toolsets/icons.js +4 -1
  110. package/dist/toolsets/icons.js.map +1 -1
  111. package/dist/toolsets/linuxToolsMac.d.ts.map +1 -1
  112. package/dist/toolsets/linuxToolsMac.js +15 -5
  113. package/dist/toolsets/linuxToolsMac.js.map +1 -1
  114. package/dist/util/appFileCopier.d.ts.map +1 -1
  115. package/dist/util/appFileCopier.js +63 -2
  116. package/dist/util/appFileCopier.js.map +1 -1
  117. package/dist/util/electronGet.d.ts +16 -0
  118. package/dist/util/electronGet.d.ts.map +1 -1
  119. package/dist/util/electronGet.js +153 -10
  120. package/dist/util/electronGet.js.map +1 -1
  121. package/dist/util/installOrRebuild.d.ts +6 -0
  122. package/dist/util/installOrRebuild.d.ts.map +1 -1
  123. package/dist/util/installOrRebuild.js +47 -0
  124. package/dist/util/installOrRebuild.js.map +1 -1
  125. package/dist/util/packageMetadata.js +46 -21
  126. package/dist/util/packageMetadata.js.map +1 -1
  127. package/dist/util/repositoryInfo.js +6 -3
  128. package/dist/util/repositoryInfo.js.map +1 -1
  129. package/dist/version.d.ts +1 -1
  130. package/dist/version.js +1 -1
  131. package/dist/version.js.map +1 -1
  132. package/dist/winPackager.d.ts +4 -3
  133. package/dist/winPackager.d.ts.map +1 -1
  134. package/dist/winPackager.js +22 -16
  135. package/dist/winPackager.js.map +1 -1
  136. package/package.json +10 -10
  137. package/scheme.json +63 -35
  138. package/templates/nsis/common.nsh +2 -2
  139. package/templates/nsis/include/allowOnlyOneInstallerInstance.nsh +68 -4
  140. package/templates/nsis/include/extractAppPackage.nsh +1 -1
  141. package/templates/nsis/include/installUtil.nsh +2 -2
  142. package/templates/nsis/include/installer.nsh +1 -1
  143. package/templates/nsis/installer.nsi +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"macCodeSign.d.ts","sourceRoot":"","sources":["../../../src/codeSign/mac/macCodeSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAyG,MAAM,EAAkB,MAAM,cAAc,CAAA;AAC5J,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAW9C,eAAO,MAAM,wBAAwB,UAAyI,CAAA;AAE9K,MAAM,MAAM,QAAQ,GAChB,0BAA0B,GAC1B,wBAAwB,GACxB,qCAAqC,GACrC,mCAAmC,GACnC,eAAe,GACf,mBAAmB,GACnB,oBAAoB,CAAA;AAExB,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,WAAW,UAAO,GAAG,OAAO,CA6BzD;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,EAAE,kBAAkB,EAAE,OAAO,iBAqCvK;AAiCD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAOnF;AAED,wBAAsB,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6ChK;AAiBD,wBAAsB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED,eAAO,IAAI,qBAAqB,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAW,CAAA;AAiHtE,qBAAa,QAAQ;IAEjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBADb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,YAAA;CAEzB;AASD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe9H"}
1
+ {"version":3,"file":"macCodeSign.d.ts","sourceRoot":"","sources":["../../../src/codeSign/mac/macCodeSign.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAyG,MAAM,EAAkB,MAAM,cAAc,CAAA;AAC5J,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAW9C,eAAO,MAAM,wBAAwB,UAAyI,CAAA;AAE9K,MAAM,MAAM,QAAQ,GAChB,0BAA0B,GAC1B,wBAAwB,GACxB,qCAAqC,GACrC,mCAAmC,GACnC,eAAe,GACf,mBAAmB,GACnB,oBAAoB,CAAA;AAExB,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,WAAW,UAAO,GAAG,OAAO,CA6BzD;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,EAAE,kBAAkB,EAAE,OAAO,iBAqCvK;AAiCD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAOnF;AAED,wBAAsB,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6ChK;AAmBD,wBAAsB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED,eAAO,IAAI,qBAAqB,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAW,CAAA;AAiHtE,qBAAa,QAAQ;IAEjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBADb,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,YAAA;CAEzB;AASD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAe9H"}
@@ -42,7 +42,7 @@ export async function reportError(isMas, certificateTypes, qualifier, keychainFi
42
42
  if (isAutoDiscoveryCodeSignIdentity()) {
43
43
  logFields.reason += `cannot find valid "${certificateTypes.join(", ")}" identity${isMas ? "" : ` or custom non-Apple code signing certificate, it could cause some undefined behaviour, e.g. macOS localized description not visible`}`;
44
44
  }
45
- logFields.reason += ", see https://electron.build/code-signing";
45
+ logFields.reason += ", see https://electron.build/docs/features/code-signing";
46
46
  if (!isAutoDiscoveryCodeSignIdentity()) {
47
47
  logFields.CSC_IDENTITY_AUTO_DISCOVERY = false;
48
48
  }
@@ -143,15 +143,17 @@ export async function createKeychain({ tmpDir, cscLink, cscKeyPassword, cscILink
143
143
  if (cscIKeyPassword != null) {
144
144
  cscPasswords.push(cscIKeyPassword);
145
145
  }
146
- return await importCerts(keychainFile, certPaths, cscPasswords);
146
+ return await importCerts(keychainFile, certPaths, cscPasswords, keychainPassword);
147
147
  }
148
- async function importCerts(keychainFile, paths, keyPasswords) {
148
+ async function importCerts(keychainFile, paths, keyPasswords, keychainPassword) {
149
149
  for (let i = 0; i < paths.length; i++) {
150
150
  const password = keyPasswords[i] ?? "";
151
151
  await exec("/usr/bin/security", ["import", paths[i], "-k", keychainFile, "-T", "/usr/bin/codesign", "-T", "/usr/bin/productbuild", "-P", password]);
152
152
  // https://stackoverflow.com/questions/39868578/security-codesign-in-sierra-keychain-ignores-access-control-settings-and-ui-p
153
153
  // https://github.com/electron-userland/electron-packager/issues/701#issuecomment-322315996
154
- await exec("/usr/bin/security", ["set-key-partition-list", "-S", "apple-tool:,apple:", "-s", "-k", password, keychainFile]);
154
+ // `-k` expects the keychain's own unlock password (as used by create-keychain/unlock-keychain above),
155
+ // not the imported item's password used by `security import -P`.
156
+ await exec("/usr/bin/security", ["set-key-partition-list", "-S", "apple-tool:,apple:", "-s", "-k", keychainPassword, keychainFile]);
155
157
  }
156
158
  return {
157
159
  keychainFile,
@@ -1 +1 @@
1
- {"version":3,"file":"macCodeSign.js","sourceRoot":"","sources":["../../../src/codeSign/mac/macCodeSign.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SignOptions } from \"@electron/osx-sign\"\nimport { sign as _sign } from \"@electron/osx-sign\"\nimport { copyFile, exec, Fields, InvalidConfigurationError, isEmptyOrSpaces, isPullRequest, log, Logger, retry, TmpDir, unlinkIfExists } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\nimport { createHash, randomBytes } from \"crypto\"\nimport { rename } from \"fs/promises\"\nimport { Lazy } from \"lazy-val\"\nimport { tmpdir } from \"os\"\nimport * as path from \"path\"\nimport { getTempName } from \"temp-file\"\nimport { isAutoDiscoveryCodeSignIdentity, isCscForPullRequest, isTravis } from \"../../util/flags.js\"\nimport { importCertificate } from \"../codesign.js\"\nimport { cacheDirectoryOverrideAllowed } from \"../../util/electronGet.js\"\n\nexport const appleCertificatePrefixes = [\"Developer ID Application:\", \"Developer ID Installer:\", \"3rd Party Mac Developer Application:\", \"3rd Party Mac Developer Installer:\"]\n\nexport type CertType =\n | \"Developer ID Application\"\n | \"Developer ID Installer\"\n | \"3rd Party Mac Developer Application\"\n | \"3rd Party Mac Developer Installer\"\n | \"Mac Developer\"\n | \"Apple Development\"\n | \"Apple Distribution\"\n\nexport interface CodeSigningInfo {\n keychainFile?: string | null\n}\n\nexport function isSignAllowed(isPrintWarn = true): boolean {\n if (process.platform !== \"darwin\") {\n if (isPrintWarn) {\n log.warn({ reason: \"supported only on macOS\" }, \"skipped macOS application code signing\")\n }\n return false\n }\n\n if (isPullRequest()) {\n const buildForPrWarning =\n \"There are serious security concerns with CSC_FOR_PULL_REQUEST=true (see the CircleCI documentation (https://circleci.com/docs/1.0/fork-pr-builds/) for details)\" +\n \"\\nIf you have SSH keys, sensitive env vars or AWS credentials stored in your project settings and untrusted forks can make pull requests against your repo, then this option isn't for you.\"\n\n if (isCscForPullRequest()) {\n if (isPrintWarn) {\n log.warn(buildForPrWarning)\n }\n } else {\n if (isPrintWarn) {\n // https://github.com/electron-userland/electron-builder/issues/1524\n log.warn(\n \"Current build is a part of pull request, code signing will be skipped.\" + \"\\nSet env CSC_FOR_PULL_REQUEST to true to force code signing.\" + `\\n${buildForPrWarning}`\n )\n }\n return false\n }\n }\n\n return true\n}\n\nexport async function reportError(isMas: boolean, certificateTypes: CertType[], qualifier: string | Nullish, keychainFile: string | Nullish, isForceCodeSigning: boolean) {\n const logFields: Fields = {}\n if (qualifier == null) {\n logFields.reason = \"\"\n if (isAutoDiscoveryCodeSignIdentity()) {\n logFields.reason += `cannot find valid \"${certificateTypes.join(\", \")}\" identity${\n isMas ? \"\" : ` or custom non-Apple code signing certificate, it could cause some undefined behaviour, e.g. macOS localized description not visible`\n }`\n }\n logFields.reason += \", see https://electron.build/code-signing\"\n if (!isAutoDiscoveryCodeSignIdentity()) {\n logFields.CSC_IDENTITY_AUTO_DISCOVERY = false\n }\n } else {\n logFields.reason = \"Identity name is specified, but no valid identity with this name in the keychain\"\n logFields.identity = qualifier\n }\n\n const args = [\"find-identity\"]\n if (keychainFile != null) {\n args.push(keychainFile)\n }\n\n if (qualifier != null || isAutoDiscoveryCodeSignIdentity()) {\n logFields.allIdentities = (await exec(\"/usr/bin/security\", args))\n .trim()\n .split(\"\\n\")\n .filter(it => !(it.includes(\"Policy: X.509 Basic\") || it.includes(\"Matching identities\")))\n .join(\"\\n\")\n }\n\n const skipMessage = \"skipped macOS application code signing\"\n if (isMas || isForceCodeSigning) {\n throw new Error(Logger.createMessage(skipMessage, logFields, \"error\", it => it))\n } else {\n log.warn(logFields, skipMessage)\n }\n}\n\n// \"Note that filename will not be searched to resolve the signing identity's certificate chain unless it is also on the user's keychain search list.\"\n// but \"security list-keychains\" doesn't support add - we should 1) get current list 2) set new list - it is very bad http://stackoverflow.com/questions/10538942/add-a-keychain-to-search-list\n// \"overly complicated and introduces a race condition.\"\n// https://github.com/electron-userland/electron-builder/issues/398\nconst bundledCertKeychainAdded = new Lazy<void>(async () => {\n // copy to temp and then atomic rename to final path\n const cacheDir = await cacheDirectoryOverrideAllowed.value\n const tmpKeychainPath = path.join(cacheDir, getTempName(\"electron-builder-root-certs\"))\n const keychainPath = path.join(cacheDir, \"electron-builder-root-certs.keychain\")\n const results = await Promise.all<any>([\n listUserKeychains(),\n copyFile(path.join(import.meta.dirname, \"..\", \"..\", \"..\", \"certs\", \"root_certs.keychain\"), tmpKeychainPath).then(() => rename(tmpKeychainPath, keychainPath)),\n ])\n const list = results[0]\n if (!list.includes(keychainPath)) {\n await exec(\"/usr/bin/security\", [\"list-keychains\", \"-d\", \"user\", \"-s\", keychainPath].concat(list))\n }\n})\n\nfunction listUserKeychains(): Promise<Array<string>> {\n return exec(\"/usr/bin/security\", [\"list-keychains\", \"-d\", \"user\"]).then(it =>\n it\n .split(\"\\n\")\n .map(it => {\n const r = it.trim()\n return r.substring(1, r.length - 1)\n })\n .filter(it => it.length > 0)\n )\n}\n\nexport interface CreateKeychainOptions {\n tmpDir: TmpDir\n cscLink: string\n cscKeyPassword: string\n cscILink?: string | null\n cscIKeyPassword?: string | null\n currentDir: string\n}\n\nexport function removeKeychain(keychainFile: string, printWarn = true): Promise<any> {\n return exec(\"/usr/bin/security\", [\"delete-keychain\", keychainFile]).catch((e: any) => {\n if (printWarn) {\n log.warn({ file: keychainFile, error: e.stack || e }, \"cannot delete keychain\")\n }\n return unlinkIfExists(keychainFile)\n })\n}\n\nexport async function createKeychain({ tmpDir, cscLink, cscKeyPassword, cscILink, cscIKeyPassword, currentDir }: CreateKeychainOptions): Promise<CodeSigningInfo> {\n // travis has correct AppleWWDRCA cert\n if (!isTravis()) {\n await bundledCertKeychainAdded.value\n }\n\n // https://github.com/electron-userland/electron-builder/issues/3685\n // use constant file\n const keychainFile = path.join(process.env.APP_BUILDER_TMP_DIR || tmpdir(), `${createHash(\"sha256\").update(currentDir).update(\"app-builder\").digest(\"hex\")}.keychain`)\n // noinspection JSUnusedLocalSymbols\n\n await removeKeychain(keychainFile, false).catch(_ => {\n /* ignore*/\n })\n\n const certLinks = [cscLink]\n if (cscILink != null) {\n certLinks.push(cscILink)\n }\n\n const certPaths = new Array(certLinks.length)\n const keychainPassword = randomBytes(32).toString(\"base64\")\n const securityCommands = [\n [\"create-keychain\", \"-p\", keychainPassword, keychainFile],\n [\"unlock-keychain\", \"-p\", keychainPassword, keychainFile],\n [\"set-keychain-settings\", keychainFile],\n ]\n\n // https://stackoverflow.com/questions/42484678/codesign-keychain-gets-ignored\n // https://github.com/electron-userland/electron-builder/issues/1457\n const list = await listUserKeychains()\n if (!list.includes(keychainFile)) {\n securityCommands.push([\"list-keychains\", \"-d\", \"user\", \"-s\", keychainFile].concat(list))\n }\n\n // Import all certs in parallel, then run security commands sequentially.\n await Promise.all(certLinks.map((link, i) => importCertificate(link, tmpDir, currentDir).then(it => (certPaths[i] = it))))\n for (const cmd of securityCommands) {\n await exec(\"/usr/bin/security\", cmd)\n }\n const cscPasswords: Array<string> = [cscKeyPassword]\n if (cscIKeyPassword != null) {\n cscPasswords.push(cscIKeyPassword)\n }\n return await importCerts(keychainFile, certPaths, cscPasswords)\n}\n\nasync function importCerts(keychainFile: string, paths: Array<string>, keyPasswords: Array<string>): Promise<CodeSigningInfo> {\n for (let i = 0; i < paths.length; i++) {\n const password = keyPasswords[i] ?? \"\"\n await exec(\"/usr/bin/security\", [\"import\", paths[i], \"-k\", keychainFile, \"-T\", \"/usr/bin/codesign\", \"-T\", \"/usr/bin/productbuild\", \"-P\", password])\n\n // https://stackoverflow.com/questions/39868578/security-codesign-in-sierra-keychain-ignores-access-control-settings-and-ui-p\n // https://github.com/electron-userland/electron-packager/issues/701#issuecomment-322315996\n await exec(\"/usr/bin/security\", [\"set-key-partition-list\", \"-S\", \"apple-tool:,apple:\", \"-s\", \"-k\", password, keychainFile])\n }\n\n return {\n keychainFile,\n }\n}\n\nexport async function sign(opts: SignOptions): Promise<void> {\n return retry(() => _sign(opts), {\n retries: 3,\n interval: 5000,\n backoff: 5000,\n })\n}\n\nexport let findIdentityRawResult: Promise<Array<string>> | null = null\n\n// Discovery of untrusted self-signed identities is OFF in production, and there is intentionally NO env var\n// or build-config option to enable it: an untrusted identity must never be silently accepted in a real\n// build. This in-process flag exists solely as a seam for electron-builder's own signing tests, which\n// provision an ephemeral self-signed cert and flip it via setAllowUntrustedSelfSignedIdentityForTesting().\nlet allowUntrustedSelfSignedIdentity = false\n\n/** @internal Test-only. Enables discovery of untrusted self-signed code-signing identities. Never use in production. */\nexport function setAllowUntrustedSelfSignedIdentityForTesting(value: boolean): void {\n allowUntrustedSelfSignedIdentity = value\n}\n\nasync function getValidIdentities(keychain?: string | null): Promise<Array<string>> {\n function addKeychain(args: Array<string>) {\n if (keychain != null) {\n args.push(keychain)\n }\n return args\n }\n\n let result = findIdentityRawResult\n if (result == null || keychain != null) {\n // https://github.com/electron-userland/electron-builder/issues/481\n // https://github.com/electron-userland/electron-builder/issues/535\n const commands = [\n exec(\"/usr/bin/security\", addKeychain([\"find-identity\", \"-v\"])).then(it =>\n it\n .trim()\n .split(\"\\n\")\n .filter(it => {\n for (const prefix of appleCertificatePrefixes) {\n if (it.includes(prefix)) {\n return true\n }\n }\n return false\n })\n ),\n exec(\"/usr/bin/security\", addKeychain([\"find-identity\", \"-v\", \"-p\", \"codesigning\"])).then(it => it.trim().split(\"\\n\")),\n ]\n\n // Test-only seam: also accept untrusted self-signed identities. `find-identity` without `-v` lists them;\n // trusted identities discovered above still take precedence (they appear first and dupes are de-duped).\n if (allowUntrustedSelfSignedIdentity) {\n commands.push(exec(\"/usr/bin/security\", addKeychain([\"find-identity\"])).then(it => it.trim().split(\"\\n\")))\n }\n\n result = Promise.all<Array<string>>(commands).then(it => {\n const array = it\n .flat()\n .filter(\n it =>\n !it.includes(\"(Missing required extension)\") &&\n !it.includes(\"identities found\") &&\n !it.includes(\"Policy: X.509 Basic\") &&\n !it.includes(\"Matching identities\") &&\n !it.includes(\"Valid identities only\") &&\n !it.includes(\"iPhone \") &&\n !it.includes(\"com.apple.idms.appleid.prd.\")\n )\n // remove 1)\n .map(it => it.substring(it.indexOf(\")\") + 1).trim())\n return Array.from(new Set(array))\n })\n\n if (keychain == null) {\n findIdentityRawResult = result\n }\n }\n return result\n}\n\nasync function _findIdentity(type: CertType, qualifier?: string | null, keychain?: string | null): Promise<Identity | null> {\n // https://github.com/electron-userland/electron-builder/issues/484\n //noinspection SpellCheckingInspection\n const lines = await getValidIdentities(keychain)\n const namePrefix = `${type}:`\n for (const line of lines) {\n if (qualifier != null && !line.includes(qualifier)) {\n continue\n }\n\n if (line.includes(namePrefix)) {\n return parseIdentity(line)\n }\n }\n\n if (type === \"Developer ID Application\") {\n // find non-Apple certificate\n // https://github.com/electron-userland/electron-builder/issues/458\n l: for (const line of lines) {\n if (qualifier != null && !line.includes(qualifier)) {\n continue\n }\n\n if (line.includes(\"Mac Developer:\")) {\n continue\n }\n\n for (const prefix of appleCertificatePrefixes) {\n if (line.includes(prefix)) {\n continue l\n }\n }\n\n return parseIdentity(line)\n }\n }\n return null\n}\n\n// @electron/osx-sign v2 no longer exposes its `Identity` class via the package's public exports, so we own this lightweight equivalent.\nexport class Identity {\n constructor(\n readonly name: string,\n readonly hash?: string\n ) {}\n}\n\nfunction parseIdentity(line: string): Identity {\n const firstQuoteIndex = line.indexOf('\"')\n const name = line.substring(firstQuoteIndex + 1, line.lastIndexOf('\"'))\n const hash = line.substring(0, firstQuoteIndex - 1)\n return new Identity(name, hash)\n}\n\nexport function findIdentity(certType: CertType, qualifier?: string | null, keychain?: string | null): Promise<Identity | null> {\n let identity = qualifier || process.env.CSC_NAME\n if (isEmptyOrSpaces(identity)) {\n if (isAutoDiscoveryCodeSignIdentity()) {\n return _findIdentity(certType, null, keychain)\n } else {\n return Promise.resolve(null)\n }\n } else {\n identity = identity.trim()\n for (const prefix of appleCertificatePrefixes) {\n checkPrefix(identity, prefix)\n }\n return _findIdentity(certType, identity, keychain)\n }\n}\n\nfunction checkPrefix(name: string, prefix: string) {\n if (name.startsWith(prefix)) {\n throw new InvalidConfigurationError(`Please remove prefix \"${prefix}\" from the specified name — appropriate certificate will be chosen automatically`)\n }\n}\n"]}
1
+ {"version":3,"file":"macCodeSign.js","sourceRoot":"","sources":["../../../src/codeSign/mac/macCodeSign.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SignOptions } from \"@electron/osx-sign\"\nimport { sign as _sign } from \"@electron/osx-sign\"\nimport { copyFile, exec, Fields, InvalidConfigurationError, isEmptyOrSpaces, isPullRequest, log, Logger, retry, TmpDir, unlinkIfExists } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\nimport { createHash, randomBytes } from \"crypto\"\nimport { rename } from \"fs/promises\"\nimport { Lazy } from \"lazy-val\"\nimport { tmpdir } from \"os\"\nimport * as path from \"path\"\nimport { getTempName } from \"temp-file\"\nimport { isAutoDiscoveryCodeSignIdentity, isCscForPullRequest, isTravis } from \"../../util/flags.js\"\nimport { importCertificate } from \"../codesign.js\"\nimport { cacheDirectoryOverrideAllowed } from \"../../util/electronGet.js\"\n\nexport const appleCertificatePrefixes = [\"Developer ID Application:\", \"Developer ID Installer:\", \"3rd Party Mac Developer Application:\", \"3rd Party Mac Developer Installer:\"]\n\nexport type CertType =\n | \"Developer ID Application\"\n | \"Developer ID Installer\"\n | \"3rd Party Mac Developer Application\"\n | \"3rd Party Mac Developer Installer\"\n | \"Mac Developer\"\n | \"Apple Development\"\n | \"Apple Distribution\"\n\nexport interface CodeSigningInfo {\n keychainFile?: string | null\n}\n\nexport function isSignAllowed(isPrintWarn = true): boolean {\n if (process.platform !== \"darwin\") {\n if (isPrintWarn) {\n log.warn({ reason: \"supported only on macOS\" }, \"skipped macOS application code signing\")\n }\n return false\n }\n\n if (isPullRequest()) {\n const buildForPrWarning =\n \"There are serious security concerns with CSC_FOR_PULL_REQUEST=true (see the CircleCI documentation (https://circleci.com/docs/1.0/fork-pr-builds/) for details)\" +\n \"\\nIf you have SSH keys, sensitive env vars or AWS credentials stored in your project settings and untrusted forks can make pull requests against your repo, then this option isn't for you.\"\n\n if (isCscForPullRequest()) {\n if (isPrintWarn) {\n log.warn(buildForPrWarning)\n }\n } else {\n if (isPrintWarn) {\n // https://github.com/electron-userland/electron-builder/issues/1524\n log.warn(\n \"Current build is a part of pull request, code signing will be skipped.\" + \"\\nSet env CSC_FOR_PULL_REQUEST to true to force code signing.\" + `\\n${buildForPrWarning}`\n )\n }\n return false\n }\n }\n\n return true\n}\n\nexport async function reportError(isMas: boolean, certificateTypes: CertType[], qualifier: string | Nullish, keychainFile: string | Nullish, isForceCodeSigning: boolean) {\n const logFields: Fields = {}\n if (qualifier == null) {\n logFields.reason = \"\"\n if (isAutoDiscoveryCodeSignIdentity()) {\n logFields.reason += `cannot find valid \"${certificateTypes.join(\", \")}\" identity${\n isMas ? \"\" : ` or custom non-Apple code signing certificate, it could cause some undefined behaviour, e.g. macOS localized description not visible`\n }`\n }\n logFields.reason += \", see https://electron.build/docs/features/code-signing\"\n if (!isAutoDiscoveryCodeSignIdentity()) {\n logFields.CSC_IDENTITY_AUTO_DISCOVERY = false\n }\n } else {\n logFields.reason = \"Identity name is specified, but no valid identity with this name in the keychain\"\n logFields.identity = qualifier\n }\n\n const args = [\"find-identity\"]\n if (keychainFile != null) {\n args.push(keychainFile)\n }\n\n if (qualifier != null || isAutoDiscoveryCodeSignIdentity()) {\n logFields.allIdentities = (await exec(\"/usr/bin/security\", args))\n .trim()\n .split(\"\\n\")\n .filter(it => !(it.includes(\"Policy: X.509 Basic\") || it.includes(\"Matching identities\")))\n .join(\"\\n\")\n }\n\n const skipMessage = \"skipped macOS application code signing\"\n if (isMas || isForceCodeSigning) {\n throw new Error(Logger.createMessage(skipMessage, logFields, \"error\", it => it))\n } else {\n log.warn(logFields, skipMessage)\n }\n}\n\n// \"Note that filename will not be searched to resolve the signing identity's certificate chain unless it is also on the user's keychain search list.\"\n// but \"security list-keychains\" doesn't support add - we should 1) get current list 2) set new list - it is very bad http://stackoverflow.com/questions/10538942/add-a-keychain-to-search-list\n// \"overly complicated and introduces a race condition.\"\n// https://github.com/electron-userland/electron-builder/issues/398\nconst bundledCertKeychainAdded = new Lazy<void>(async () => {\n // copy to temp and then atomic rename to final path\n const cacheDir = await cacheDirectoryOverrideAllowed.value\n const tmpKeychainPath = path.join(cacheDir, getTempName(\"electron-builder-root-certs\"))\n const keychainPath = path.join(cacheDir, \"electron-builder-root-certs.keychain\")\n const results = await Promise.all<any>([\n listUserKeychains(),\n copyFile(path.join(import.meta.dirname, \"..\", \"..\", \"..\", \"certs\", \"root_certs.keychain\"), tmpKeychainPath).then(() => rename(tmpKeychainPath, keychainPath)),\n ])\n const list = results[0]\n if (!list.includes(keychainPath)) {\n await exec(\"/usr/bin/security\", [\"list-keychains\", \"-d\", \"user\", \"-s\", keychainPath].concat(list))\n }\n})\n\nfunction listUserKeychains(): Promise<Array<string>> {\n return exec(\"/usr/bin/security\", [\"list-keychains\", \"-d\", \"user\"]).then(it =>\n it\n .split(\"\\n\")\n .map(it => {\n const r = it.trim()\n return r.substring(1, r.length - 1)\n })\n .filter(it => it.length > 0)\n )\n}\n\nexport interface CreateKeychainOptions {\n tmpDir: TmpDir\n cscLink: string\n cscKeyPassword: string\n cscILink?: string | null\n cscIKeyPassword?: string | null\n currentDir: string\n}\n\nexport function removeKeychain(keychainFile: string, printWarn = true): Promise<any> {\n return exec(\"/usr/bin/security\", [\"delete-keychain\", keychainFile]).catch((e: any) => {\n if (printWarn) {\n log.warn({ file: keychainFile, error: e.stack || e }, \"cannot delete keychain\")\n }\n return unlinkIfExists(keychainFile)\n })\n}\n\nexport async function createKeychain({ tmpDir, cscLink, cscKeyPassword, cscILink, cscIKeyPassword, currentDir }: CreateKeychainOptions): Promise<CodeSigningInfo> {\n // travis has correct AppleWWDRCA cert\n if (!isTravis()) {\n await bundledCertKeychainAdded.value\n }\n\n // https://github.com/electron-userland/electron-builder/issues/3685\n // use constant file\n const keychainFile = path.join(process.env.APP_BUILDER_TMP_DIR || tmpdir(), `${createHash(\"sha256\").update(currentDir).update(\"app-builder\").digest(\"hex\")}.keychain`)\n // noinspection JSUnusedLocalSymbols\n\n await removeKeychain(keychainFile, false).catch(_ => {\n /* ignore*/\n })\n\n const certLinks = [cscLink]\n if (cscILink != null) {\n certLinks.push(cscILink)\n }\n\n const certPaths = new Array(certLinks.length)\n const keychainPassword = randomBytes(32).toString(\"base64\")\n const securityCommands = [\n [\"create-keychain\", \"-p\", keychainPassword, keychainFile],\n [\"unlock-keychain\", \"-p\", keychainPassword, keychainFile],\n [\"set-keychain-settings\", keychainFile],\n ]\n\n // https://stackoverflow.com/questions/42484678/codesign-keychain-gets-ignored\n // https://github.com/electron-userland/electron-builder/issues/1457\n const list = await listUserKeychains()\n if (!list.includes(keychainFile)) {\n securityCommands.push([\"list-keychains\", \"-d\", \"user\", \"-s\", keychainFile].concat(list))\n }\n\n // Import all certs in parallel, then run security commands sequentially.\n await Promise.all(certLinks.map((link, i) => importCertificate(link, tmpDir, currentDir).then(it => (certPaths[i] = it))))\n for (const cmd of securityCommands) {\n await exec(\"/usr/bin/security\", cmd)\n }\n const cscPasswords: Array<string> = [cscKeyPassword]\n if (cscIKeyPassword != null) {\n cscPasswords.push(cscIKeyPassword)\n }\n return await importCerts(keychainFile, certPaths, cscPasswords, keychainPassword)\n}\n\nasync function importCerts(keychainFile: string, paths: Array<string>, keyPasswords: Array<string>, keychainPassword: string): Promise<CodeSigningInfo> {\n for (let i = 0; i < paths.length; i++) {\n const password = keyPasswords[i] ?? \"\"\n await exec(\"/usr/bin/security\", [\"import\", paths[i], \"-k\", keychainFile, \"-T\", \"/usr/bin/codesign\", \"-T\", \"/usr/bin/productbuild\", \"-P\", password])\n\n // https://stackoverflow.com/questions/39868578/security-codesign-in-sierra-keychain-ignores-access-control-settings-and-ui-p\n // https://github.com/electron-userland/electron-packager/issues/701#issuecomment-322315996\n // `-k` expects the keychain's own unlock password (as used by create-keychain/unlock-keychain above),\n // not the imported item's password used by `security import -P`.\n await exec(\"/usr/bin/security\", [\"set-key-partition-list\", \"-S\", \"apple-tool:,apple:\", \"-s\", \"-k\", keychainPassword, keychainFile])\n }\n\n return {\n keychainFile,\n }\n}\n\nexport async function sign(opts: SignOptions): Promise<void> {\n return retry(() => _sign(opts), {\n retries: 3,\n interval: 5000,\n backoff: 5000,\n })\n}\n\nexport let findIdentityRawResult: Promise<Array<string>> | null = null\n\n// Discovery of untrusted self-signed identities is OFF in production, and there is intentionally NO env var\n// or build-config option to enable it: an untrusted identity must never be silently accepted in a real\n// build. This in-process flag exists solely as a seam for electron-builder's own signing tests, which\n// provision an ephemeral self-signed cert and flip it via setAllowUntrustedSelfSignedIdentityForTesting().\nlet allowUntrustedSelfSignedIdentity = false\n\n/** @internal Test-only. Enables discovery of untrusted self-signed code-signing identities. Never use in production. */\nexport function setAllowUntrustedSelfSignedIdentityForTesting(value: boolean): void {\n allowUntrustedSelfSignedIdentity = value\n}\n\nasync function getValidIdentities(keychain?: string | null): Promise<Array<string>> {\n function addKeychain(args: Array<string>) {\n if (keychain != null) {\n args.push(keychain)\n }\n return args\n }\n\n let result = findIdentityRawResult\n if (result == null || keychain != null) {\n // https://github.com/electron-userland/electron-builder/issues/481\n // https://github.com/electron-userland/electron-builder/issues/535\n const commands = [\n exec(\"/usr/bin/security\", addKeychain([\"find-identity\", \"-v\"])).then(it =>\n it\n .trim()\n .split(\"\\n\")\n .filter(it => {\n for (const prefix of appleCertificatePrefixes) {\n if (it.includes(prefix)) {\n return true\n }\n }\n return false\n })\n ),\n exec(\"/usr/bin/security\", addKeychain([\"find-identity\", \"-v\", \"-p\", \"codesigning\"])).then(it => it.trim().split(\"\\n\")),\n ]\n\n // Test-only seam: also accept untrusted self-signed identities. `find-identity` without `-v` lists them;\n // trusted identities discovered above still take precedence (they appear first and dupes are de-duped).\n if (allowUntrustedSelfSignedIdentity) {\n commands.push(exec(\"/usr/bin/security\", addKeychain([\"find-identity\"])).then(it => it.trim().split(\"\\n\")))\n }\n\n result = Promise.all<Array<string>>(commands).then(it => {\n const array = it\n .flat()\n .filter(\n it =>\n !it.includes(\"(Missing required extension)\") &&\n !it.includes(\"identities found\") &&\n !it.includes(\"Policy: X.509 Basic\") &&\n !it.includes(\"Matching identities\") &&\n !it.includes(\"Valid identities only\") &&\n !it.includes(\"iPhone \") &&\n !it.includes(\"com.apple.idms.appleid.prd.\")\n )\n // remove 1)\n .map(it => it.substring(it.indexOf(\")\") + 1).trim())\n return Array.from(new Set(array))\n })\n\n if (keychain == null) {\n findIdentityRawResult = result\n }\n }\n return result\n}\n\nasync function _findIdentity(type: CertType, qualifier?: string | null, keychain?: string | null): Promise<Identity | null> {\n // https://github.com/electron-userland/electron-builder/issues/484\n //noinspection SpellCheckingInspection\n const lines = await getValidIdentities(keychain)\n const namePrefix = `${type}:`\n for (const line of lines) {\n if (qualifier != null && !line.includes(qualifier)) {\n continue\n }\n\n if (line.includes(namePrefix)) {\n return parseIdentity(line)\n }\n }\n\n if (type === \"Developer ID Application\") {\n // find non-Apple certificate\n // https://github.com/electron-userland/electron-builder/issues/458\n l: for (const line of lines) {\n if (qualifier != null && !line.includes(qualifier)) {\n continue\n }\n\n if (line.includes(\"Mac Developer:\")) {\n continue\n }\n\n for (const prefix of appleCertificatePrefixes) {\n if (line.includes(prefix)) {\n continue l\n }\n }\n\n return parseIdentity(line)\n }\n }\n return null\n}\n\n// @electron/osx-sign v2 no longer exposes its `Identity` class via the package's public exports, so we own this lightweight equivalent.\nexport class Identity {\n constructor(\n readonly name: string,\n readonly hash?: string\n ) {}\n}\n\nfunction parseIdentity(line: string): Identity {\n const firstQuoteIndex = line.indexOf('\"')\n const name = line.substring(firstQuoteIndex + 1, line.lastIndexOf('\"'))\n const hash = line.substring(0, firstQuoteIndex - 1)\n return new Identity(name, hash)\n}\n\nexport function findIdentity(certType: CertType, qualifier?: string | null, keychain?: string | null): Promise<Identity | null> {\n let identity = qualifier || process.env.CSC_NAME\n if (isEmptyOrSpaces(identity)) {\n if (isAutoDiscoveryCodeSignIdentity()) {\n return _findIdentity(certType, null, keychain)\n } else {\n return Promise.resolve(null)\n }\n } else {\n identity = identity.trim()\n for (const prefix of appleCertificatePrefixes) {\n checkPrefix(identity, prefix)\n }\n return _findIdentity(certType, identity, keychain)\n }\n}\n\nfunction checkPrefix(name: string, prefix: string) {\n if (name.startsWith(prefix)) {\n throw new InvalidConfigurationError(`Please remove prefix \"${prefix}\" from the specified name — appropriate certificate will be chosen automatically`)\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The subset of {@link SigningResult} a sign manager's single sign attempt can produce
3
+ * (e.g. Windows `SignManager.signFile`). Failures are always thrown, never returned:
4
+ * - `signed` — the configured signing tooling signed the file/app itself
5
+ * - `signed:custom` — a custom `sign` hook did the signing
6
+ * - `skipped:no-certificate` — nothing to sign with (no certificate configured / no signing identity found, and no custom `sign` hook)
7
+ */
8
+ export type SignFileResult = "signed" | "signed:custom" | "skipped:no-certificate";
9
+ /**
10
+ * Result of a signing operation, unified across the platform packagers' signing logic
11
+ * ({@link SignFileResult} extended with the skip reasons that are decided before any signing
12
+ * tooling is invoked). Failures are always thrown, never returned:
13
+ * - `skipped:filtered` — the file does not match the signing filters (e.g. the Windows `signExts` filter)
14
+ * - `skipped:disabled` — signing is explicitly disabled (`win.sign: false`/`null`, or macOS `sign`/`sign.identity` set to `null`)
15
+ * - `skipped:unsupported` — signing is not possible in this build environment (e.g. macOS signing on a non-mac host,
16
+ * or the pull-request CI guard) or is not implemented by this platform packager (the base `PlatformPackager.signApp`, e.g. Linux)
17
+ */
18
+ export type SigningResult = SignFileResult | "skipped:filtered" | "skipped:disabled" | "skipped:unsupported";
19
+ export declare function isSignResultSigned(result: SigningResult): result is "signed" | "signed:custom";
20
+ /**
21
+ * Folds per-file sign results into the single result `signApp` reports: any signed result wins
22
+ * (the `afterSign` hook must fire when at least one file was actually signed); otherwise the first
23
+ * skip reason is returned. An empty set means no file matched the signing filters at all.
24
+ */
25
+ export declare function combineSignResults(results: Array<SigningResult>): SigningResult;
26
+ //# sourceMappingURL=signResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signResult.d.ts","sourceRoot":"","sources":["../../src/codeSign/signResult.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,eAAe,GAAG,wBAAwB,CAAA;AAElF;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,qBAAqB,CAAA;AAE5G,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,IAAI,QAAQ,GAAG,eAAe,CAE9F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,aAAa,CAE/E"}
@@ -0,0 +1,12 @@
1
+ export function isSignResultSigned(result) {
2
+ return result === "signed" || result === "signed:custom";
3
+ }
4
+ /**
5
+ * Folds per-file sign results into the single result `signApp` reports: any signed result wins
6
+ * (the `afterSign` hook must fire when at least one file was actually signed); otherwise the first
7
+ * skip reason is returned. An empty set means no file matched the signing filters at all.
8
+ */
9
+ export function combineSignResults(results) {
10
+ return results.find(isSignResultSigned) ?? results[0] ?? "skipped:filtered";
11
+ }
12
+ //# sourceMappingURL=signResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signResult.js","sourceRoot":"","sources":["../../src/codeSign/signResult.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,eAAe,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA6B;IAC9D,OAAO,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAA;AAC7E,CAAC","sourcesContent":["/**\n * The subset of {@link SigningResult} a sign manager's single sign attempt can produce\n * (e.g. Windows `SignManager.signFile`). Failures are always thrown, never returned:\n * - `signed` — the configured signing tooling signed the file/app itself\n * - `signed:custom` — a custom `sign` hook did the signing\n * - `skipped:no-certificate` — nothing to sign with (no certificate configured / no signing identity found, and no custom `sign` hook)\n */\nexport type SignFileResult = \"signed\" | \"signed:custom\" | \"skipped:no-certificate\"\n\n/**\n * Result of a signing operation, unified across the platform packagers' signing logic\n * ({@link SignFileResult} extended with the skip reasons that are decided before any signing\n * tooling is invoked). Failures are always thrown, never returned:\n * - `skipped:filtered` — the file does not match the signing filters (e.g. the Windows `signExts` filter)\n * - `skipped:disabled` — signing is explicitly disabled (`win.sign: false`/`null`, or macOS `sign`/`sign.identity` set to `null`)\n * - `skipped:unsupported` — signing is not possible in this build environment (e.g. macOS signing on a non-mac host,\n * or the pull-request CI guard) or is not implemented by this platform packager (the base `PlatformPackager.signApp`, e.g. Linux)\n */\nexport type SigningResult = SignFileResult | \"skipped:filtered\" | \"skipped:disabled\" | \"skipped:unsupported\"\n\nexport function isSignResultSigned(result: SigningResult): result is \"signed\" | \"signed:custom\" {\n return result === \"signed\" || result === \"signed:custom\"\n}\n\n/**\n * Folds per-file sign results into the single result `signApp` reports: any signed result wins\n * (the `afterSign` hook must fire when at least one file was actually signed); otherwise the first\n * skip reason is returned. An empty set means no file matched the signing filters at all.\n */\nexport function combineSignResults(results: Array<SigningResult>): SigningResult {\n return results.find(isSignResultSigned) ?? results[0] ?? \"skipped:filtered\"\n}\n"]}
@@ -5,12 +5,13 @@ import { WindowsConfiguration } from "../../options/winOptions.js";
5
5
  import type { WinPackager } from "../../winPackager.js";
6
6
  import { CertificateFromStoreInfo, FileCodeSigningInfo } from "./signtoolBaseSignManager.js";
7
7
  import { WindowsSignOptions } from "./windowsCodeSign.js";
8
+ import { SignFileResult } from "../signResult.js";
8
9
  export interface SignManager {
9
10
  readonly computedPublisherName: Lazy<Array<string> | null>;
10
11
  readonly cscInfo: MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>;
11
12
  computePublisherName(target: Target, publisherName: string | null): Promise<string>;
12
13
  initialize(): Promise<void>;
13
- signFile(options: WindowsSignOptions): Promise<boolean>;
14
+ signFile(options: WindowsSignOptions): Promise<SignFileResult>;
14
15
  }
15
16
  export declare function createSignManager(packager: WinPackager): SignManager;
16
17
  //# sourceMappingURL=signManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAsC,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAuB,MAAM,8BAA8B,CAAA;AAEjH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,GAAG,wBAAwB,GAAG,IAAI,CAAC,CAAA;IACvG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACxD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CAYpE"}
1
+ {"version":3,"file":"signManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAsC,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGvD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAuB,MAAM,8BAA8B,CAAA;AAEjH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,GAAG,wBAAwB,GAAG,IAAI,CAAC,CAAA;IACvG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CAC/D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,CAYpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"signManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/signManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAwB,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAiD,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAWtE,MAAM,UAAU,iBAAiB,CAAC,QAAqB;IACrD,QAAQ,kCAAkC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3E,KAAK,OAAO;YACV,OAAO,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QAC9C,KAAK,KAAK;YACR,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;QACrC,KAAK,QAAQ;YACX,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACxC,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC","sourcesContent":["import { MemoLazy } from \"builder-util-runtime\"\nimport { Lazy } from \"lazy-val\"\nimport { Target } from \"../../core.js\"\nimport { resolveWindowsSigningConfiguration, WindowsConfiguration } from \"../../options/winOptions.js\"\nimport type { WinPackager } from \"../../winPackager.js\"\nimport { HsmSignManager } from \"./hsmSignManager.js\"\nimport { Pkcs11SignManager } from \"./pkcs11SignManager.js\"\nimport { CertificateFromStoreInfo, FileCodeSigningInfo, SigntoolSignManager } from \"./signtoolBaseSignManager.js\"\nimport { WindowsSignAzureManager } from \"./windowsSignAzureManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\n\nexport interface SignManager {\n readonly computedPublisherName: Lazy<Array<string> | null>\n readonly cscInfo: MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>\n computePublisherName(target: Target, publisherName: string | null): Promise<string>\n initialize(): Promise<void>\n signFile(options: WindowsSignOptions): Promise<boolean>\n}\n\nexport function createSignManager(packager: WinPackager): SignManager {\n switch (resolveWindowsSigningConfiguration(packager.platformOptions)?.type) {\n case \"azure\":\n return new WindowsSignAzureManager(packager)\n case \"hsm\":\n return new HsmSignManager(packager)\n case \"pkcs11\":\n return new Pkcs11SignManager(packager)\n case \"signtool\":\n default:\n return new SigntoolSignManager(packager)\n }\n}\n"]}
1
+ {"version":3,"file":"signManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/signManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kCAAkC,EAAwB,MAAM,6BAA6B,CAAA;AAEtG,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAiD,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAYtE,MAAM,UAAU,iBAAiB,CAAC,QAAqB;IACrD,QAAQ,kCAAkC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;QAC3E,KAAK,OAAO;YACV,OAAO,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QAC9C,KAAK,KAAK;YACR,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;QACrC,KAAK,QAAQ;YACX,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACxC,KAAK,UAAU,CAAC;QAChB;YACE,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC","sourcesContent":["import { MemoLazy } from \"builder-util-runtime\"\nimport { Lazy } from \"lazy-val\"\nimport { Target } from \"../../core.js\"\nimport { resolveWindowsSigningConfiguration, WindowsConfiguration } from \"../../options/winOptions.js\"\nimport type { WinPackager } from \"../../winPackager.js\"\nimport { HsmSignManager } from \"./hsmSignManager.js\"\nimport { Pkcs11SignManager } from \"./pkcs11SignManager.js\"\nimport { CertificateFromStoreInfo, FileCodeSigningInfo, SigntoolSignManager } from \"./signtoolBaseSignManager.js\"\nimport { WindowsSignAzureManager } from \"./windowsSignAzureManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\nimport { SignFileResult } from \"../signResult.js\"\n\nexport interface SignManager {\n readonly computedPublisherName: Lazy<Array<string> | null>\n readonly cscInfo: MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>\n computePublisherName(target: Target, publisherName: string | null): Promise<string>\n initialize(): Promise<void>\n signFile(options: WindowsSignOptions): Promise<SignFileResult>\n}\n\nexport function createSignManager(packager: WinPackager): SignManager {\n switch (resolveWindowsSigningConfiguration(packager.platformOptions)?.type) {\n case \"azure\":\n return new WindowsSignAzureManager(packager)\n case \"hsm\":\n return new HsmSignManager(packager)\n case \"pkcs11\":\n return new Pkcs11SignManager(packager)\n case \"signtool\":\n default:\n return new SigntoolSignManager(packager)\n }\n}\n"]}
@@ -7,6 +7,7 @@ import { VmManager } from "../../vm/vm.js";
7
7
  import type { WinPackager } from "../../winPackager.js";
8
8
  import type { SignManager } from "./signManager.js";
9
9
  import { WindowsSignOptions } from "./windowsCodeSign.js";
10
+ import { SignFileResult } from "../signResult.js";
10
11
  export type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>;
11
12
  export interface WindowsSignToolOptions extends WindowsSignOptions {
12
13
  readonly name: string;
@@ -37,12 +38,35 @@ export interface CertificateFromStoreInfo {
37
38
  }
38
39
  /** Extracts the non-Azure signing config from WindowsConfiguration, or null for Azure/unset/disabled. */
39
40
  export declare function getSigntoolFamilyConfig(config: WindowsConfiguration): WindowsSigntoolFamilyConfig | null;
41
+ /**
42
+ * Matches configured publisher names against a certificate subject using the same semantics as
43
+ * electron-updater's update signature verifier (windowsExecutableCodeSignatureVerifier): a name that
44
+ * parses as a Distinguished Name (DN) must match every RDN it specifies against the certificate
45
+ * subject (extra subject RDNs are ignored); otherwise it is compared strictly against the
46
+ * certificate's Common Name (CN). Passes when ANY configured name matches — multiple names are
47
+ * supported for certificate rotation.
48
+ */
49
+ export declare function publisherNameMatchesCertificate(publisherNames: Array<string>, certInfo: CertificateInfo): boolean;
40
50
  export declare abstract class SigntoolBaseSignManager implements SignManager {
41
51
  protected readonly packager: WinPackager;
42
52
  protected readonly platformSpecificBuildOptions: WindowsConfiguration;
43
53
  constructor(packager: WinPackager);
44
54
  readonly computedPublisherName: Lazy<string[] | null>;
45
55
  readonly lazyCertInfo: MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>;
56
+ private readonly explicitPublisherNameValidation;
57
+ /**
58
+ * When `publisherName` is explicitly configured and the subject of the local code signing
59
+ * certificate is known, fail the build if none of the configured names match the certificate.
60
+ * This catches signing with the wrong certificate at build time — otherwise the mismatch only
61
+ * surfaces at update time, when electron-updater rejects every update signed with that
62
+ * certificate.
63
+ *
64
+ * The check is intentionally skipped whenever the actual signing certificate's subject is not
65
+ * genuinely known: custom `sign` hooks, PKCS#11 without an extractable certificate file,
66
+ * x509 certificate files without a CN, or any error while reading certificate info.
67
+ * An explicit `publisherName: null` remains a pure opt-out (nothing to validate).
68
+ */
69
+ protected validateExplicitPublisherName(): Promise<void>;
46
70
  readonly cscInfo: MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>;
47
71
  initialize(): Promise<void>;
48
72
  computePublisherName(target: Target, publisherName: string | null): Promise<string>;
@@ -51,7 +75,7 @@ export declare abstract class SigntoolBaseSignManager implements SignManager {
51
75
  * Override in subclasses with different null-cert behaviour (HSM throws, PKCS#11 proceeds).
52
76
  */
53
77
  protected handleNullCscInfo(customSign: CustomWindowsSign | string | null | undefined): boolean;
54
- signFile(options: WindowsSignOptions): Promise<boolean>;
78
+ signFile(options: WindowsSignOptions): Promise<SignFileResult>;
55
79
  getCertInfo(file: string, password: string): Promise<CertificateInfo>;
56
80
  computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm?: VmManager): Array<string>;
57
81
  protected isLegacyToolset(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"signtoolBaseSignManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signtoolBaseSignManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/signtoolBaseSignManager.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,24 @@ export function getSigntoolFamilyConfig(config) {
21
21
  }
22
22
  return s;
23
23
  }
24
+ /**
25
+ * Matches configured publisher names against a certificate subject using the same semantics as
26
+ * electron-updater's update signature verifier (windowsExecutableCodeSignatureVerifier): a name that
27
+ * parses as a Distinguished Name (DN) must match every RDN it specifies against the certificate
28
+ * subject (extra subject RDNs are ignored); otherwise it is compared strictly against the
29
+ * certificate's Common Name (CN). Passes when ANY configured name matches — multiple names are
30
+ * supported for certificate rotation.
31
+ */
32
+ export function publisherNameMatchesCertificate(publisherNames, certInfo) {
33
+ const subject = parseDn(certInfo.bloodyMicrosoftSubjectDn);
34
+ return publisherNames.some(name => {
35
+ const dn = parseDn(name);
36
+ if (dn.size) {
37
+ return Array.from(dn.keys()).every(key => dn.get(key) === subject.get(key));
38
+ }
39
+ return name === certInfo.commonName;
40
+ });
41
+ }
24
42
  export class SigntoolBaseSignManager {
25
43
  constructor(packager) {
26
44
  this.packager = packager;
@@ -31,6 +49,7 @@ export class SigntoolBaseSignManager {
31
49
  return null;
32
50
  }
33
51
  else if (publisherName != null) {
52
+ await this.explicitPublisherNameValidation.value;
34
53
  return asArray(publisherName);
35
54
  }
36
55
  const certInfo = await this.lazyCertInfo.value;
@@ -60,6 +79,8 @@ export class SigntoolBaseSignManager {
60
79
  // Returns null when the CN is absent — caller must set publisherName explicitly.
61
80
  return await readCertInfoFromX509(cscFile);
62
81
  });
82
+ // Memoized so the check runs once per build even though signFile is invoked once per file.
83
+ this.explicitPublisherNameValidation = new Lazy(() => this.validateExplicitPublisherName());
63
84
  this.cscInfo = new MemoLazy(() => this.platformSpecificBuildOptions, platformSpecificBuildOptions => {
64
85
  const signing = getSigntoolFamilyConfig(platformSpecificBuildOptions);
65
86
  // signtool is the implicit default when win.sign is unset, so an absent config still
@@ -115,6 +136,53 @@ export class SigntoolBaseSignManager {
115
136
  });
116
137
  this.platformSpecificBuildOptions = packager.platformOptions;
117
138
  }
139
+ /**
140
+ * When `publisherName` is explicitly configured and the subject of the local code signing
141
+ * certificate is known, fail the build if none of the configured names match the certificate.
142
+ * This catches signing with the wrong certificate at build time — otherwise the mismatch only
143
+ * surfaces at update time, when electron-updater rejects every update signed with that
144
+ * certificate.
145
+ *
146
+ * The check is intentionally skipped whenever the actual signing certificate's subject is not
147
+ * genuinely known: custom `sign` hooks, PKCS#11 without an extractable certificate file,
148
+ * x509 certificate files without a CN, or any error while reading certificate info.
149
+ * An explicit `publisherName: null` remains a pure opt-out (nothing to validate).
150
+ */
151
+ async validateExplicitPublisherName() {
152
+ const signing = getSigntoolFamilyConfig(this.platformSpecificBuildOptions);
153
+ const publisherName = signing?.publisherName;
154
+ if (publisherName == null) {
155
+ // not configured (auto-derive) or explicit `null` opt-out — nothing to validate
156
+ return;
157
+ }
158
+ if (signing?.sign != null) {
159
+ // custom sign hook: electron-builder does not know which certificate the hook actually signs with
160
+ return;
161
+ }
162
+ const publisherNames = asArray(publisherName);
163
+ if (publisherNames.length === 0) {
164
+ return;
165
+ }
166
+ let certInfo;
167
+ try {
168
+ certInfo = await this.lazyCertInfo.value;
169
+ }
170
+ catch (e) {
171
+ // this check must only fire when the signing certificate's subject is genuinely known
172
+ log.debug({ error: e.message || e }, "skipping publisherName validation against the signing certificate (cannot read certificate info)");
173
+ return;
174
+ }
175
+ if (certInfo == null) {
176
+ return;
177
+ }
178
+ if (!publisherNameMatchesCertificate(publisherNames, certInfo)) {
179
+ throw new InvalidConfigurationError(`The configured publisherName does not match the subject of the code signing certificate. ` +
180
+ `This usually means the build is signing with the wrong certificate (for example, a code signing certificate for another platform or team leaked into WIN_CSC_LINK/CSC_LINK in CI) — electron-updater would reject every update signed with it.\n` +
181
+ ` Configured publisherName: ${publisherNames.join(" | ")}\n` +
182
+ ` Certificate subject: ${certInfo.bloodyMicrosoftSubjectDn}\n` +
183
+ `Fix win.publisherName (or sign with the intended certificate). To opt out of update signature verification entirely, set publisherName to null.`);
184
+ }
185
+ }
118
186
  initialize() {
119
187
  return Promise.resolve();
120
188
  }
@@ -179,10 +247,13 @@ export class SigntoolBaseSignManager {
179
247
  };
180
248
  }
181
249
  log.info(logInfo, "signing");
250
+ // validate an explicitly configured publisherName against the signing certificate before the
251
+ // first file is signed, so a wrong-certificate build fails even when no publish config exists
252
+ await this.explicitPublisherNameValidation.value;
182
253
  }
183
254
  else if (this.handleNullCscInfo(customSign)) {
184
- log.debug({ signHook: !!customSign, cscInfo }, "no signing info identified, signing is skipped");
185
- return false;
255
+ // the canonical "signing skipped" message is logged once in signWindows, which receives this reason
256
+ return "skipped:no-certificate";
186
257
  }
187
258
  const executor = customSign || ((config, packager) => this.doSign(config, packager));
188
259
  let isNest = false;
@@ -197,7 +268,7 @@ export class SigntoolBaseSignManager {
197
268
  await rename(taskConfiguration.resultOutputPath, options.path);
198
269
  }
199
270
  }
200
- return true;
271
+ return customSign ? "signed:custom" : "signed";
201
272
  }
202
273
  async getCertInfo(file, password) {
203
274
  const errorMessagePrefix = "Cannot extract publisher name from code signing certificate. As workaround, set win.publisherName. Error: ";