app-builder-lib 27.0.0-alpha.2 → 27.0.0-alpha.4

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 (247) hide show
  1. package/dist/Framework.d.ts +2 -0
  2. package/dist/Framework.d.ts.map +1 -1
  3. package/dist/Framework.js.map +1 -1
  4. package/dist/asar/asarFileChecker.d.ts +4 -2
  5. package/dist/asar/asarFileChecker.d.ts.map +1 -1
  6. package/dist/asar/asarFileChecker.js +2 -3
  7. package/dist/asar/asarFileChecker.js.map +1 -1
  8. package/dist/codeSign/certInfo.d.ts +14 -0
  9. package/dist/codeSign/certInfo.d.ts.map +1 -1
  10. package/dist/codeSign/certInfo.js +49 -0
  11. package/dist/codeSign/certInfo.js.map +1 -1
  12. package/dist/codeSign/mac/macCodeSign.d.ts +3 -3
  13. package/dist/codeSign/mac/macCodeSign.d.ts.map +1 -1
  14. package/dist/codeSign/mac/macCodeSign.js +40 -14
  15. package/dist/codeSign/mac/macCodeSign.js.map +1 -1
  16. package/dist/codeSign/win/hsmSignManager.d.ts +10 -0
  17. package/dist/codeSign/win/hsmSignManager.d.ts.map +1 -0
  18. package/dist/codeSign/win/hsmSignManager.js +50 -0
  19. package/dist/codeSign/win/hsmSignManager.js.map +1 -0
  20. package/dist/codeSign/win/pkcs11SignManager.d.ts +14 -0
  21. package/dist/codeSign/win/pkcs11SignManager.d.ts.map +1 -0
  22. package/dist/codeSign/win/pkcs11SignManager.js +82 -0
  23. package/dist/codeSign/win/pkcs11SignManager.js.map +1 -0
  24. package/dist/codeSign/{signManager.d.ts → win/signManager.d.ts} +8 -6
  25. package/dist/codeSign/win/signManager.d.ts.map +1 -0
  26. package/dist/codeSign/win/signManager.js +19 -0
  27. package/dist/codeSign/win/signManager.js.map +1 -0
  28. package/dist/codeSign/win/signtoolBaseSignManager.d.ts +71 -0
  29. package/dist/codeSign/win/signtoolBaseSignManager.d.ts.map +1 -0
  30. package/dist/codeSign/win/signtoolBaseSignManager.js +414 -0
  31. package/dist/codeSign/win/signtoolBaseSignManager.js.map +1 -0
  32. package/dist/codeSign/win/windowsCodeSign.d.ts.map +1 -1
  33. package/dist/codeSign/win/windowsCodeSign.js +9 -4
  34. package/dist/codeSign/win/windowsCodeSign.js.map +1 -1
  35. package/dist/codeSign/win/windowsSignAzureManager.d.ts +9 -3
  36. package/dist/codeSign/win/windowsSignAzureManager.d.ts.map +1 -1
  37. package/dist/codeSign/win/windowsSignAzureManager.js +130 -36
  38. package/dist/codeSign/win/windowsSignAzureManager.js.map +1 -1
  39. package/dist/codeSign/win/windowsSignToolManager.d.ts +1 -58
  40. package/dist/codeSign/win/windowsSignToolManager.d.ts.map +1 -1
  41. package/dist/codeSign/win/windowsSignToolManager.js +3 -363
  42. package/dist/codeSign/win/windowsSignToolManager.js.map +1 -1
  43. package/dist/configuration.d.ts +22 -123
  44. package/dist/configuration.d.ts.map +1 -1
  45. package/dist/configuration.js.map +1 -1
  46. package/dist/electron/ElectronFramework.d.ts +0 -2
  47. package/dist/electron/ElectronFramework.d.ts.map +1 -1
  48. package/dist/electron/ElectronFramework.js +15 -27
  49. package/dist/electron/ElectronFramework.js.map +1 -1
  50. package/dist/electron/injectFFMPEG.js +2 -2
  51. package/dist/electron/injectFFMPEG.js.map +1 -1
  52. package/dist/electron/mac/electronMac.js +10 -8
  53. package/dist/electron/mac/electronMac.js.map +1 -1
  54. package/dist/electron/win/electronWin.js +1 -2
  55. package/dist/electron/win/electronWin.js.map +1 -1
  56. package/dist/index.d.ts +8 -4
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +3 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/indexInternal.d.ts +3 -3
  61. package/dist/indexInternal.d.ts.map +1 -1
  62. package/dist/indexInternal.js +2 -2
  63. package/dist/indexInternal.js.map +1 -1
  64. package/dist/macPackager.d.ts +19 -10
  65. package/dist/macPackager.d.ts.map +1 -1
  66. package/dist/macPackager.js +149 -121
  67. package/dist/macPackager.js.map +1 -1
  68. package/dist/node-module-collector/moduleManager.d.ts +9 -2
  69. package/dist/node-module-collector/moduleManager.d.ts.map +1 -1
  70. package/dist/node-module-collector/moduleManager.js +4 -2
  71. package/dist/node-module-collector/moduleManager.js.map +1 -1
  72. package/dist/node-module-collector/nodeModulesCollector.d.ts +13 -23
  73. package/dist/node-module-collector/nodeModulesCollector.d.ts.map +1 -1
  74. package/dist/node-module-collector/nodeModulesCollector.js +52 -122
  75. package/dist/node-module-collector/nodeModulesCollector.js.map +1 -1
  76. package/dist/node-module-collector/pnpmNodeModulesCollector.d.ts +48 -1
  77. package/dist/node-module-collector/pnpmNodeModulesCollector.d.ts.map +1 -1
  78. package/dist/node-module-collector/pnpmNodeModulesCollector.js +216 -17
  79. package/dist/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
  80. package/dist/node-module-collector/types.d.ts +2 -0
  81. package/dist/node-module-collector/types.d.ts.map +1 -1
  82. package/dist/node-module-collector/types.js.map +1 -1
  83. package/dist/options/FuseOptionsV1.d.ts +137 -0
  84. package/dist/options/FuseOptionsV1.d.ts.map +1 -0
  85. package/dist/options/FuseOptionsV1.js +2 -0
  86. package/dist/options/FuseOptionsV1.js.map +1 -0
  87. package/dist/options/PlatformSpecificBuildOptions.d.ts +1 -1
  88. package/dist/options/PlatformSpecificBuildOptions.d.ts.map +1 -1
  89. package/dist/options/PlatformSpecificBuildOptions.js.map +1 -1
  90. package/dist/options/linuxOptions.d.ts +0 -10
  91. package/dist/options/linuxOptions.d.ts.map +1 -1
  92. package/dist/options/linuxOptions.js.map +1 -1
  93. package/dist/options/macOptions.d.ts +93 -126
  94. package/dist/options/macOptions.d.ts.map +1 -1
  95. package/dist/options/macOptions.js.map +1 -1
  96. package/dist/options/winOptions.d.ts +137 -63
  97. package/dist/options/winOptions.d.ts.map +1 -1
  98. package/dist/options/winOptions.js +12 -1
  99. package/dist/options/winOptions.js.map +1 -1
  100. package/dist/packager.js +1 -1
  101. package/dist/packager.js.map +1 -1
  102. package/dist/platformPackager.d.ts +5 -2
  103. package/dist/platformPackager.d.ts.map +1 -1
  104. package/dist/platformPackager.js +16 -13
  105. package/dist/platformPackager.js.map +1 -1
  106. package/dist/targets/ArchiveTarget.js +2 -2
  107. package/dist/targets/ArchiveTarget.js.map +1 -1
  108. package/dist/targets/archive.d.ts +10 -2
  109. package/dist/targets/archive.d.ts.map +1 -1
  110. package/dist/targets/archive.js +25 -6
  111. package/dist/targets/archive.js.map +1 -1
  112. package/dist/targets/linux/FlatpakTarget.d.ts.map +1 -1
  113. package/dist/targets/linux/FlatpakTarget.js +4 -1
  114. package/dist/targets/linux/FlatpakTarget.js.map +1 -1
  115. package/dist/targets/linux/FpmTarget.d.ts +6 -0
  116. package/dist/targets/linux/FpmTarget.d.ts.map +1 -1
  117. package/dist/targets/linux/FpmTarget.js +25 -3
  118. package/dist/targets/linux/FpmTarget.js.map +1 -1
  119. package/dist/targets/linux/LinuxTargetHelper.d.ts +14 -0
  120. package/dist/targets/linux/LinuxTargetHelper.d.ts.map +1 -1
  121. package/dist/targets/linux/LinuxTargetHelper.js +38 -59
  122. package/dist/targets/linux/LinuxTargetHelper.js.map +1 -1
  123. package/dist/targets/linux/appimage/AppImageTarget.d.ts +1 -0
  124. package/dist/targets/linux/appimage/AppImageTarget.d.ts.map +1 -1
  125. package/dist/targets/linux/appimage/AppImageTarget.js +8 -9
  126. package/dist/targets/linux/appimage/AppImageTarget.js.map +1 -1
  127. package/dist/targets/linux/appimage/appImageUtil.d.ts +4 -0
  128. package/dist/targets/linux/appimage/appImageUtil.d.ts.map +1 -1
  129. package/dist/targets/linux/appimage/appImageUtil.js +11 -4
  130. package/dist/targets/linux/appimage/appImageUtil.js.map +1 -1
  131. package/dist/targets/linux/appimage/appLauncher.d.ts.map +1 -1
  132. package/dist/targets/linux/appimage/appLauncher.js +5 -11
  133. package/dist/targets/linux/appimage/appLauncher.js.map +1 -1
  134. package/dist/targets/linux/launcherScript.d.ts +32 -0
  135. package/dist/targets/linux/launcherScript.d.ts.map +1 -0
  136. package/dist/targets/linux/launcherScript.js +24 -0
  137. package/dist/targets/linux/launcherScript.js.map +1 -0
  138. package/dist/targets/linux/snap/core24.d.ts +2 -0
  139. package/dist/targets/linux/snap/core24.d.ts.map +1 -1
  140. package/dist/targets/linux/snap/core24.js +48 -8
  141. package/dist/targets/linux/snap/core24.js.map +1 -1
  142. package/dist/targets/linux/snap/coreLegacy.d.ts +2 -2
  143. package/dist/targets/linux/snap/coreLegacy.d.ts.map +1 -1
  144. package/dist/targets/linux/snap/coreLegacy.js +9 -10
  145. package/dist/targets/linux/snap/coreLegacy.js.map +1 -1
  146. package/dist/targets/linux/snap/snapCommand.d.ts +13 -0
  147. package/dist/targets/linux/snap/snapCommand.d.ts.map +1 -0
  148. package/dist/targets/linux/snap/snapCommand.js +21 -0
  149. package/dist/targets/linux/snap/snapCommand.js.map +1 -0
  150. package/dist/targets/mac/MacTargetHelper.d.ts +12 -12
  151. package/dist/targets/mac/MacTargetHelper.d.ts.map +1 -1
  152. package/dist/targets/mac/MacTargetHelper.js +72 -67
  153. package/dist/targets/mac/MacTargetHelper.js.map +1 -1
  154. package/dist/targets/mac/pkg.d.ts.map +1 -1
  155. package/dist/targets/mac/pkg.js +4 -4
  156. package/dist/targets/mac/pkg.js.map +1 -1
  157. package/dist/targets/win/AppxTarget.d.ts.map +1 -1
  158. package/dist/targets/win/AppxTarget.js +9 -9
  159. package/dist/targets/win/AppxTarget.js.map +1 -1
  160. package/dist/targets/win/MsiTarget.d.ts.map +1 -1
  161. package/dist/targets/win/MsiTarget.js +8 -11
  162. package/dist/targets/win/MsiTarget.js.map +1 -1
  163. package/dist/targets/win/nsis/NsisTarget.js +5 -5
  164. package/dist/targets/win/nsis/NsisTarget.js.map +1 -1
  165. package/dist/targets/win/nsis/nsisScriptGenerator.js +2 -2
  166. package/dist/targets/win/nsis/nsisScriptGenerator.js.map +1 -1
  167. package/dist/targets/win/nsis/nsisUtil.d.ts.map +1 -1
  168. package/dist/targets/win/nsis/nsisUtil.js +2 -2
  169. package/dist/targets/win/nsis/nsisUtil.js.map +1 -1
  170. package/dist/toolsets/custom.d.ts +1 -0
  171. package/dist/toolsets/custom.d.ts.map +1 -1
  172. package/dist/toolsets/custom.js +19 -8
  173. package/dist/toolsets/custom.js.map +1 -1
  174. package/dist/toolsets/icons.d.ts.map +1 -1
  175. package/dist/toolsets/icons.js +11 -3
  176. package/dist/toolsets/icons.js.map +1 -1
  177. package/dist/toolsets/winCodeSign.d.ts +36 -0
  178. package/dist/toolsets/winCodeSign.d.ts.map +1 -1
  179. package/dist/toolsets/winCodeSign.js +84 -30
  180. package/dist/toolsets/winCodeSign.js.map +1 -1
  181. package/dist/toolsets/wine.d.ts.map +1 -1
  182. package/dist/toolsets/wine.js +20 -12
  183. package/dist/toolsets/wine.js.map +1 -1
  184. package/dist/util/appFileCopier.d.ts.map +1 -1
  185. package/dist/util/appFileCopier.js +9 -4
  186. package/dist/util/appFileCopier.js.map +1 -1
  187. package/dist/util/archCompatibility.d.ts +42 -0
  188. package/dist/util/archCompatibility.d.ts.map +1 -0
  189. package/dist/util/archCompatibility.js +202 -0
  190. package/dist/util/archCompatibility.js.map +1 -0
  191. package/dist/util/config/schemaValidator.d.ts.map +1 -1
  192. package/dist/util/config/schemaValidator.js +1 -1
  193. package/dist/util/config/schemaValidator.js.map +1 -1
  194. package/dist/util/electronGet.d.ts +8 -25
  195. package/dist/util/electronGet.d.ts.map +1 -1
  196. package/dist/util/electronGet.js +107 -87
  197. package/dist/util/electronGet.js.map +1 -1
  198. package/dist/util/flags.d.ts +0 -3
  199. package/dist/util/flags.d.ts.map +1 -1
  200. package/dist/util/flags.js +0 -9
  201. package/dist/util/flags.js.map +1 -1
  202. package/dist/util/installOrRebuild.d.ts +38 -0
  203. package/dist/util/installOrRebuild.d.ts.map +1 -0
  204. package/dist/util/{yarn.js → installOrRebuild.js} +65 -14
  205. package/dist/util/installOrRebuild.js.map +1 -0
  206. package/dist/util/langs.d.ts.map +1 -1
  207. package/dist/util/langs.js +1 -0
  208. package/dist/util/langs.js.map +1 -1
  209. package/dist/util/license.d.ts.map +1 -1
  210. package/dist/util/license.js +4 -1
  211. package/dist/util/license.js.map +1 -1
  212. package/dist/util/mac/macosIconComposer.d.ts +2 -1
  213. package/dist/util/mac/macosIconComposer.d.ts.map +1 -1
  214. package/dist/util/mac/macosIconComposer.js +40 -58
  215. package/dist/util/mac/macosIconComposer.js.map +1 -1
  216. package/dist/util/streamSpawnToFile.d.ts +47 -0
  217. package/dist/util/streamSpawnToFile.d.ts.map +1 -0
  218. package/dist/util/streamSpawnToFile.js +110 -0
  219. package/dist/util/streamSpawnToFile.js.map +1 -0
  220. package/dist/util/toolsetLock.d.ts +2 -0
  221. package/dist/util/toolsetLock.d.ts.map +1 -1
  222. package/dist/util/toolsetLock.js +31 -5
  223. package/dist/util/toolsetLock.js.map +1 -1
  224. package/dist/version.d.ts +1 -1
  225. package/dist/version.js +1 -1
  226. package/dist/version.js.map +1 -1
  227. package/dist/vm/ParallelsVm.d.ts.map +1 -1
  228. package/dist/vm/ParallelsVm.js +13 -2
  229. package/dist/vm/ParallelsVm.js.map +1 -1
  230. package/dist/vm/vm.d.ts.map +1 -1
  231. package/dist/vm/vm.js +4 -1
  232. package/dist/vm/vm.js.map +1 -1
  233. package/dist/winPackager.d.ts +1 -2
  234. package/dist/winPackager.d.ts.map +1 -1
  235. package/dist/winPackager.js +17 -22
  236. package/dist/winPackager.js.map +1 -1
  237. package/package.json +15 -14
  238. package/scheme.json +486 -439
  239. package/templates/appx/appxmanifest.xml +1 -2
  240. package/templates/nsis/assistedMessages.yml +17 -0
  241. package/templates/nsis/messages.yml +5 -0
  242. package/dist/codeSign/signManager.d.ts.map +0 -1
  243. package/dist/codeSign/signManager.js +0 -2
  244. package/dist/codeSign/signManager.js.map +0 -1
  245. package/dist/util/yarn.d.ts +0 -23
  246. package/dist/util/yarn.d.ts.map +0 -1
  247. package/dist/util/yarn.js.map +0 -1
@@ -1,25 +1,51 @@
1
- import { asArray, log } from "builder-util";
2
- import { MemoLazy } from "builder-util-runtime";
1
+ import { Arch, isEmptyOrSpaces, log, sanitizeDirPath } from "builder-util";
2
+ import { asArray, MemoLazy } from "builder-util-runtime";
3
+ import _fsExtra from "fs-extra";
3
4
  import { Lazy } from "lazy-val";
5
+ import * as path from "path";
6
+ import { resolveWindowsSigningConfiguration } from "../../options/winOptions.js";
7
+ import { getAtsBundleDir, getDotnetRuntimeDir, getWindowsKitsBundle } from "../../toolsets/winCodeSign.js";
8
+ import { VmManager } from "../../vm/vm.js";
9
+ import { WineVmManager } from "../../vm/WineVm.js";
10
+ import semver from "semver";
11
+ const minimumWinCodeSignVersionForDlib = "1.3.0";
4
12
  export class WindowsSignAzureManager {
13
+ get publisherName() {
14
+ const result = this.signing.publisherName;
15
+ if (isEmptyOrSpaces(result)) {
16
+ throw new Error("Azure Trusted Signing requires 'publisherName' in win.sign config (no local certificate to derive it from)");
17
+ }
18
+ return result;
19
+ }
5
20
  constructor(packager) {
6
21
  this.packager = packager;
22
+ // signtool.exe is a Windows PE binary; use Wine on non-Windows (same pattern as MsiTarget).
23
+ this.vm = process.platform === "win32" ? new VmManager() : new WineVmManager(this.packager.config.toolsets?.wine, this.packager.buildResourcesDir);
7
24
  this.computedPublisherName = new Lazy(() => {
8
- const publisherName = this.platformOptions.azureSignOptions?.publisherName;
9
- if (publisherName === null) {
10
- return Promise.resolve(null);
11
- }
12
- else if (publisherName != null) {
13
- return Promise.resolve(asArray(publisherName));
14
- }
15
- // TODO: Is there another way to automatically pull Publisher Name from AzureTrusted service?
16
- // For now return null.
17
- return Promise.resolve(null);
25
+ return Promise.resolve(asArray(this.publisherName));
18
26
  });
19
27
  this.cscInfo = new MemoLazy(() => this.packager.platformOptions, _selected => Promise.resolve(null));
20
- this.platformOptions = packager.platformOptions;
28
+ const signing = resolveWindowsSigningConfiguration(packager.platformOptions);
29
+ if (signing?.type !== "azure") {
30
+ throw new Error(`WindowsSignAzureManager requires signing.type = "azure", got: ${signing?.type}`);
31
+ }
32
+ this.signing = signing;
33
+ }
34
+ isLegacyMode() {
35
+ const { winCodeSign: wcs = null } = this.packager.config.toolsets ?? {};
36
+ if (typeof wcs === "string") {
37
+ return semver.lt(wcs, minimumWinCodeSignVersionForDlib);
38
+ }
39
+ // null = built-in toolset not configured → legacy; ToolsetCustom object = user-managed → not legacy
40
+ return wcs == null;
21
41
  }
22
42
  async initialize() {
43
+ if (!this.isLegacyMode()) {
44
+ return;
45
+ }
46
+ const { winCodeSign: wcs = null } = this.packager.config.toolsets ?? {};
47
+ const reason = typeof wcs === "string" ? `toolsets.winCodeSign "${wcs}" is below the minimum "${minimumWinCodeSignVersionForDlib}"` : `toolsets.winCodeSign is not set`;
48
+ log.info({ reason, guidance: `set toolsets.winCodeSign to "${minimumWinCodeSignVersionForDlib}" to use the faster signtool /dlib integration` }, `Azure Trusted Signing: falling back to legacy PowerShell (Invoke-TrustedSigning)`);
23
49
  const vm = await this.packager.vm.value;
24
50
  const ps = await vm.powershellCommand.value;
25
51
  log.info(null, "installing required module (TrustedSigning) with scope CurrentUser");
@@ -27,41 +53,109 @@ export class WindowsSignAzureManager {
27
53
  await vm.exec(ps, ["-NoProfile", "-NonInteractive", "-Command", "Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope CurrentUser"]);
28
54
  }
29
55
  catch (error) {
30
- // Might not be needed, seems GH runners already have NuGet set up.
31
- // Logging to debug just in case users run into this. If NuGet isn't present, Install-Module -Name TrustedSigning will fail, so we'll get the logs at that point
32
- log.debug({ message: error.message || error.stack }, "unable to install PackageProvider Nuget. Might be a false alarm though as some systems already have it installed");
56
+ log.debug({ message: error.message || error.stack }, "unable to install PackageProvider NuGet — may already be present");
33
57
  }
34
58
  await vm.exec(ps, ["-NoProfile", "-NonInteractive", "-Command", "Install-Module -Name TrustedSigning -MinimumVersion 0.5.0 -Force -Repository PSGallery -Scope CurrentUser"]);
35
- // If signing has been misconfigured it, the error from the TrustedSigning module should be descriptive enough to help them fix their configuration.
36
- // Options: https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential?view=azure-dotnet#definition
37
59
  }
38
- computePublisherName() {
39
- return Promise.resolve(this.packager.platformOptions.azureSignOptions.publisherName);
60
+ computePublisherName(_target, publisherName) {
61
+ return Promise.resolve(this.publisherName ?? publisherName);
40
62
  }
41
- // prerequisite: requires `initializeProviderModules` to already have been executed
42
63
  async signFile(options) {
64
+ return this.isLegacyMode() ? this.signFileLegacy(options) : this.signFileWithDlib(options);
65
+ }
66
+ async signFileLegacy(options) {
67
+ const { signing } = this;
43
68
  const vm = await this.packager.vm.value;
44
69
  const ps = await vm.powershellCommand.value;
45
- const { publisherName: _publisher, // extract from `extraSigningArgs`
46
- endpoint, certificateProfileName, codeSigningAccountName, fileDigest, timestampRfc3161, timestampDigest, ...extraSigningArgs } = options.options.azureSignOptions;
70
+ // Validate additionalMetadata keys before embedding as PS parameter names.
71
+ // Keys flow directly into `-${field} '...'` in the command string; a key
72
+ // containing semicolons or quotes would be PowerShell injection.
73
+ const PS_PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
74
+ for (const key of Object.keys(signing.additionalMetadata ?? {})) {
75
+ if (!PS_PARAM_NAME.test(key)) {
76
+ throw new Error(`additionalMetadata key "${key}" is not a valid PowerShell parameter name. Keys must match /^[A-Za-z_][A-Za-z0-9_]*$/ (e.g. "ExcludeCredentials", "CorrelationId").`);
77
+ }
78
+ }
47
79
  const params = {
48
- ...extraSigningArgs,
49
- Endpoint: endpoint,
50
- CertificateProfileName: certificateProfileName,
51
- CodeSigningAccountName: codeSigningAccountName,
52
- TimestampRfc3161: timestampRfc3161 || "http://timestamp.acs.microsoft.com",
53
- TimestampDigest: timestampDigest || "SHA256",
54
- FileDigest: fileDigest || "SHA256",
80
+ Endpoint: signing.endpoint,
81
+ CertificateProfileName: signing.certificateProfileName,
82
+ CodeSigningAccountName: signing.codeSigningAccountName,
83
+ TimestampRfc3161: signing.timestampRfc3161 ?? "http://timestamp.acs.microsoft.com",
84
+ TimestampDigest: signing.timestampDigest ?? "SHA256",
85
+ FileDigest: signing.fileDigest ?? "SHA256",
86
+ ...signing.additionalMetadata,
55
87
  Files: vm.toVmFile(options.path),
56
88
  };
57
89
  const paramsString = Object.entries(params)
58
- .filter(([_, value]) => value != null)
59
- .reduce((res, [field, value]) => {
60
- const escapedValue = String(value).replace(/'/g, "''");
61
- return [...res, `-${field}`, `'${escapedValue}'`];
62
- }, [])
90
+ .filter(([, value]) => value != null)
91
+ .map(([field, value]) => `-${field} '${String(value).replace(/'/g, "''")}'`)
63
92
  .join(" ");
64
- await vm.exec(ps, ["-NoProfile", "-NonInteractive", "-Command", `Invoke-TrustedSigning ${paramsString}`]);
93
+ // Use -EncodedCommand (Base64 UTF-16LE) so the command string is opaque to any
94
+ // intermediate shell or argument parser — no cmd.exe / ConHost escaping needed.
95
+ // PowerShell still parses the decoded string, so PS-level single-quote escaping above is retained.
96
+ const psCommand = `Invoke-TrustedSigning ${paramsString}`;
97
+ const encodedCommand = Buffer.from(psCommand, "utf16le").toString("base64");
98
+ await vm.exec(ps, ["-NoProfile", "-NonInteractive", "-EncodedCommand", encodedCommand]);
99
+ return true;
100
+ }
101
+ async signFileWithDlib(options) {
102
+ const { signing } = this;
103
+ const winCodeSign = this.packager.config.toolsets.winCodeSign;
104
+ // The ATS payload (dlib + its dependency closure) ships x64/x86 only; the bundle's arm64
105
+ // dir has no dlib. On arm64 hosts use the x64 signtool + dlib — x64 signtool runs under
106
+ // Windows-on-ARM emulation natively, and under x64 Wine on macOS/Linux.
107
+ const arch = process.arch === "ia32" ? Arch.ia32 : Arch.x64;
108
+ const { kit: kitDir } = await getWindowsKitsBundle({ winCodeSign, arch, resourcesDir: this.packager.buildResourcesDir });
109
+ // For custom toolsets the kit lives within buildResourcesDir; enforce that constraint.
110
+ // For versioned/cached bundles no base constraint is needed (paths are in the tool cache).
111
+ const safeKitDir = sanitizeDirPath(kitDir, typeof winCodeSign === "object" ? this.packager.buildResourcesDir : undefined);
112
+ const signtoolPath = path.join(safeKitDir, "signtool.exe");
113
+ let dlibPath;
114
+ let dotnetRootPath = null;
115
+ if (typeof winCodeSign === "string") {
116
+ // 1.3.0+: dlib ships in a separate ats-bundle with its full native dependency closure
117
+ // (Ijwhost.dll, VC++ runtime, etc.). The .NET 8 framework is in a separate dotnet-runtime
118
+ // bundle; DOTNET_ROOT tells Ijwhost where to find hostfxr.dll → shared framework.
119
+ const safeAtsDir = sanitizeDirPath(await getAtsBundleDir(winCodeSign));
120
+ dlibPath = path.join(safeAtsDir, arch === Arch.ia32 ? "x86" : "x64", "Azure.CodeSigning.Dlib.dll");
121
+ dotnetRootPath = sanitizeDirPath(await getDotnetRuntimeDir(winCodeSign));
122
+ }
123
+ else {
124
+ // Custom toolset: user provides the dlib alongside signtool in the kit dir.
125
+ dlibPath = path.join(safeKitDir, "Azure.CodeSigning.Dlib.dll");
126
+ }
127
+ const metadataPath = await this.packager.getTempFile(".json");
128
+ await _fsExtra.writeJson(metadataPath, {
129
+ Endpoint: signing.endpoint,
130
+ CodeSigningAccountName: signing.codeSigningAccountName,
131
+ CertificateProfileName: signing.certificateProfileName,
132
+ ...signing.additionalMetadata,
133
+ });
134
+ const args = [
135
+ "sign",
136
+ "/fd",
137
+ (signing.fileDigest ?? "SHA256").toUpperCase(),
138
+ "/tr",
139
+ signing.timestampRfc3161 ?? "http://timestamp.acs.microsoft.com",
140
+ "/td",
141
+ (signing.timestampDigest ?? "SHA256").toUpperCase(),
142
+ "/dlib",
143
+ this.vm.toVmFile(dlibPath),
144
+ "/dmdf",
145
+ this.vm.toVmFile(metadataPath),
146
+ this.vm.toVmFile(options.path),
147
+ ];
148
+ log.info({
149
+ file: log.filePath(options.path),
150
+ endpoint: signing.endpoint,
151
+ account: signing.codeSigningAccountName,
152
+ profile: signing.certificateProfileName,
153
+ }, "signing with Azure Trusted Signing (signtool /dlib)");
154
+ // DOTNET_ROOT: Ijwhost.dll (shipped in the ats-bundle) reads this env var to locate
155
+ // hostfxr.dll. On Wine, toVmFile converts the host path to a Z:\ path that Wine resolves
156
+ // back to the same location on the host filesystem.
157
+ const execOptions = dotnetRootPath != null ? { env: { DOTNET_ROOT: this.vm.toVmFile(dotnetRootPath) } } : undefined;
158
+ await this.vm.exec(signtoolPath, args, execOptions);
65
159
  return true;
66
160
  }
67
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"windowsSignAzureManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/windowsSignAzureManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAO/B,MAAM,OAAO,uBAAuB;IAgBlC,YAA6B,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;QAbzC,0BAAqB,GAAG,IAAI,IAAI,CAAuB,GAAG,EAAE;YACnE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,aAAa,CAAA;YAC1E,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;iBAAM,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA;YAChD,CAAC;YAED,6FAA6F;YAC7F,uBAAuB;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAA;QA2BO,YAAO,GAAG,IAAI,QAAQ,CAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EACnC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CACnC,CAAA;QA3BC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAA;QACvC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAA;QAE3C,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,oEAAoE,CAAC,CAAA;QACpF,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,yFAAyF,CAAC,CAAC,CAAA;QAC7J,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,mEAAmE;YACnE,gKAAgK;YAChK,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,kHAAkH,CAAC,CAAA;QAC1K,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,2GAA2G,CAAC,CAAC,CAAA;QAE7K,oJAAoJ;QACpJ,0HAA0H;IAC5H,CAAC;IAED,oBAAoB;QAClB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAiB,CAAC,aAAa,CAAC,CAAA;IACvF,CAAC;IAKD,mFAAmF;IACnF,KAAK,CAAC,QAAQ,CAAC,OAA2B;QACxC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAA;QACvC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAA;QAE3C,MAAM,EACJ,aAAa,EAAE,UAAU,EAAE,kCAAkC;QAC7D,QAAQ,EACR,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,GAAG,gBAAgB,EACpB,GAAqC,OAAO,CAAC,OAAO,CAAC,gBAAiB,CAAA;QACvE,MAAM,MAAM,GAAG;YACb,GAAG,gBAAgB;YACnB,QAAQ,EAAE,QAAQ;YAClB,sBAAsB,EAAE,sBAAsB;YAC9C,sBAAsB,EAAE,sBAAsB;YAC9C,gBAAgB,EAAE,gBAAgB,IAAI,oCAAoC;YAC1E,eAAe,EAAE,eAAe,IAAI,QAAQ;YAC5C,UAAU,EAAE,UAAU,IAAI,QAAQ;YAClC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;SACjC,CAAA;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACxC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;aACrC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACtD,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,IAAI,YAAY,GAAG,CAAC,CAAA;QACnD,CAAC,EAAE,EAAc,CAAC;aACjB,IAAI,CAAC,GAAG,CAAC,CAAA;QACZ,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,yBAAyB,YAAY,EAAE,CAAC,CAAC,CAAA;QAEzG,OAAO,IAAI,CAAA;IACb,CAAC;CACF","sourcesContent":["import { asArray, log } from \"builder-util\"\nimport { MemoLazy } from \"builder-util-runtime\"\nimport { Lazy } from \"lazy-val\"\nimport { WindowsAzureSigningConfiguration, WindowsConfiguration } from \"../../options/winOptions.js\"\nimport { WinPackager } from \"../../winPackager.js\"\nimport { SignManager } from \"../signManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\nimport { CertificateFromStoreInfo, FileCodeSigningInfo } from \"./windowsSignToolManager.js\"\n\nexport class WindowsSignAzureManager implements SignManager {\n private readonly platformOptions: WindowsConfiguration\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(() => {\n const publisherName = this.platformOptions.azureSignOptions?.publisherName\n if (publisherName === null) {\n return Promise.resolve(null)\n } else if (publisherName != null) {\n return Promise.resolve(asArray(publisherName))\n }\n\n // TODO: Is there another way to automatically pull Publisher Name from AzureTrusted service?\n // For now return null.\n return Promise.resolve(null)\n })\n\n constructor(private readonly packager: WinPackager) {\n this.platformOptions = packager.platformOptions\n }\n\n async initialize() {\n const vm = await this.packager.vm.value\n const ps = await vm.powershellCommand.value\n\n log.info(null, \"installing required module (TrustedSigning) with scope CurrentUser\")\n try {\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-Command\", \"Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope CurrentUser\"])\n } catch (error: any) {\n // Might not be needed, seems GH runners already have NuGet set up.\n // Logging to debug just in case users run into this. If NuGet isn't present, Install-Module -Name TrustedSigning will fail, so we'll get the logs at that point\n log.debug({ message: error.message || error.stack }, \"unable to install PackageProvider Nuget. Might be a false alarm though as some systems already have it installed\")\n }\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-Command\", \"Install-Module -Name TrustedSigning -MinimumVersion 0.5.0 -Force -Repository PSGallery -Scope CurrentUser\"])\n\n // If signing has been misconfigured it, the error from the TrustedSigning module should be descriptive enough to help them fix their configuration.\n // Options: https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential?view=azure-dotnet#definition\n }\n\n computePublisherName(): Promise<string> {\n return Promise.resolve(this.packager.platformOptions.azureSignOptions!.publisherName)\n }\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.packager.platformOptions,\n _selected => Promise.resolve(null)\n )\n // prerequisite: requires `initializeProviderModules` to already have been executed\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n const vm = await this.packager.vm.value\n const ps = await vm.powershellCommand.value\n\n const {\n publisherName: _publisher, // extract from `extraSigningArgs`\n endpoint,\n certificateProfileName,\n codeSigningAccountName,\n fileDigest,\n timestampRfc3161,\n timestampDigest,\n ...extraSigningArgs\n }: WindowsAzureSigningConfiguration = options.options.azureSignOptions!\n const params = {\n ...extraSigningArgs,\n Endpoint: endpoint,\n CertificateProfileName: certificateProfileName,\n CodeSigningAccountName: codeSigningAccountName,\n TimestampRfc3161: timestampRfc3161 || \"http://timestamp.acs.microsoft.com\",\n TimestampDigest: timestampDigest || \"SHA256\",\n FileDigest: fileDigest || \"SHA256\",\n Files: vm.toVmFile(options.path),\n }\n const paramsString = Object.entries(params)\n .filter(([_, value]) => value != null)\n .reduce((res, [field, value]) => {\n const escapedValue = String(value).replace(/'/g, \"''\")\n return [...res, `-${field}`, `'${escapedValue}'`]\n }, [] as string[])\n .join(\" \")\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-Command\", `Invoke-TrustedSigning ${paramsString}`])\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"windowsSignAzureManager.js","sourceRoot":"","sources":["../../../src/codeSign/win/windowsSignAzureManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arch, isEmptyOrSpaces, log, sanitizeDirPath } from \"builder-util\"\nimport { asArray, MemoLazy } from \"builder-util-runtime\"\nimport _fsExtra from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../../core.js\"\nimport { resolveWindowsSigningConfiguration, WindowsAzureSigningConfig, WindowsConfiguration } from \"../../options/winOptions.js\"\nimport { getAtsBundleDir, getDotnetRuntimeDir, getWindowsKitsBundle } from \"../../toolsets/winCodeSign.js\"\nimport { VmManager } from \"../../vm/vm.js\"\nimport { WineVmManager } from \"../../vm/WineVm.js\"\nimport { WinPackager } from \"../../winPackager.js\"\nimport { SignManager } from \"./signManager.js\"\nimport { WindowsSignOptions } from \"./windowsCodeSign.js\"\nimport { CertificateFromStoreInfo, FileCodeSigningInfo } from \"./windowsSignToolManager.js\"\nimport semver from \"semver\"\n\nconst minimumWinCodeSignVersionForDlib = \"1.3.0\"\nexport class WindowsSignAzureManager implements SignManager {\n private readonly signing: WindowsAzureSigningConfig\n\n // signtool.exe is a Windows PE binary; use Wine on non-Windows (same pattern as MsiTarget).\n private readonly vm: VmManager = process.platform === \"win32\" ? new VmManager() : new WineVmManager(this.packager.config.toolsets?.wine, this.packager.buildResourcesDir)\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(() => {\n return Promise.resolve(asArray(this.publisherName))\n })\n\n private get publisherName(): string {\n const result = this.signing.publisherName\n if (isEmptyOrSpaces(result)) {\n throw new Error(\"Azure Trusted Signing requires 'publisherName' in win.sign config (no local certificate to derive it from)\")\n }\n return result\n }\n\n constructor(private readonly packager: WinPackager) {\n const signing = resolveWindowsSigningConfiguration(packager.platformOptions)\n if (signing?.type !== \"azure\") {\n throw new Error(`WindowsSignAzureManager requires signing.type = \"azure\", got: ${signing?.type}`)\n }\n this.signing = signing\n }\n\n private isLegacyMode(): boolean {\n const { winCodeSign: wcs = null } = this.packager.config.toolsets ?? {}\n if (typeof wcs === \"string\") {\n return semver.lt(wcs, minimumWinCodeSignVersionForDlib)\n }\n // null = built-in toolset not configured → legacy; ToolsetCustom object = user-managed → not legacy\n return wcs == null\n }\n\n async initialize(): Promise<void> {\n if (!this.isLegacyMode()) {\n return\n }\n\n const { winCodeSign: wcs = null } = this.packager.config.toolsets ?? {}\n const reason = typeof wcs === \"string\" ? `toolsets.winCodeSign \"${wcs}\" is below the minimum \"${minimumWinCodeSignVersionForDlib}\"` : `toolsets.winCodeSign is not set`\n log.info(\n { reason, guidance: `set toolsets.winCodeSign to \"${minimumWinCodeSignVersionForDlib}\" to use the faster signtool /dlib integration` },\n `Azure Trusted Signing: falling back to legacy PowerShell (Invoke-TrustedSigning)`\n )\n\n const vm = await this.packager.vm.value\n const ps = await vm.powershellCommand.value\n log.info(null, \"installing required module (TrustedSigning) with scope CurrentUser\")\n try {\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-Command\", \"Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Scope CurrentUser\"])\n } catch (error: any) {\n log.debug({ message: error.message || error.stack }, \"unable to install PackageProvider NuGet — may already be present\")\n }\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-Command\", \"Install-Module -Name TrustedSigning -MinimumVersion 0.5.0 -Force -Repository PSGallery -Scope CurrentUser\"])\n }\n\n computePublisherName(_target: Target, publisherName: string | null): Promise<string> {\n return Promise.resolve(this.publisherName ?? publisherName)\n }\n\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.packager.platformOptions,\n _selected => Promise.resolve(null)\n )\n\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n return this.isLegacyMode() ? this.signFileLegacy(options) : this.signFileWithDlib(options)\n }\n\n private async signFileLegacy(options: WindowsSignOptions): Promise<boolean> {\n const { signing } = this\n const vm = await this.packager.vm.value\n const ps = await vm.powershellCommand.value\n\n // Validate additionalMetadata keys before embedding as PS parameter names.\n // Keys flow directly into `-${field} '...'` in the command string; a key\n // containing semicolons or quotes would be PowerShell injection.\n const PS_PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/\n for (const key of Object.keys(signing.additionalMetadata ?? {})) {\n if (!PS_PARAM_NAME.test(key)) {\n throw new Error(\n `additionalMetadata key \"${key}\" is not a valid PowerShell parameter name. Keys must match /^[A-Za-z_][A-Za-z0-9_]*$/ (e.g. \"ExcludeCredentials\", \"CorrelationId\").`\n )\n }\n }\n\n const params: Record<string, string | undefined> = {\n Endpoint: signing.endpoint,\n CertificateProfileName: signing.certificateProfileName,\n CodeSigningAccountName: signing.codeSigningAccountName,\n TimestampRfc3161: signing.timestampRfc3161 ?? \"http://timestamp.acs.microsoft.com\",\n TimestampDigest: signing.timestampDigest ?? \"SHA256\",\n FileDigest: signing.fileDigest ?? \"SHA256\",\n ...signing.additionalMetadata,\n Files: vm.toVmFile(options.path),\n }\n\n const paramsString = Object.entries(params)\n .filter(([, value]) => value != null)\n .map(([field, value]) => `-${field} '${String(value).replace(/'/g, \"''\")}'`)\n .join(\" \")\n\n // Use -EncodedCommand (Base64 UTF-16LE) so the command string is opaque to any\n // intermediate shell or argument parser — no cmd.exe / ConHost escaping needed.\n // PowerShell still parses the decoded string, so PS-level single-quote escaping above is retained.\n const psCommand = `Invoke-TrustedSigning ${paramsString}`\n const encodedCommand = Buffer.from(psCommand, \"utf16le\").toString(\"base64\")\n await vm.exec(ps, [\"-NoProfile\", \"-NonInteractive\", \"-EncodedCommand\", encodedCommand])\n return true\n }\n\n private async signFileWithDlib(options: WindowsSignOptions): Promise<boolean> {\n const { signing } = this\n const winCodeSign = this.packager.config.toolsets!.winCodeSign!\n\n // The ATS payload (dlib + its dependency closure) ships x64/x86 only; the bundle's arm64\n // dir has no dlib. On arm64 hosts use the x64 signtool + dlib — x64 signtool runs under\n // Windows-on-ARM emulation natively, and under x64 Wine on macOS/Linux.\n const arch = process.arch === \"ia32\" ? Arch.ia32 : Arch.x64\n const { kit: kitDir } = await getWindowsKitsBundle({ winCodeSign, arch, resourcesDir: this.packager.buildResourcesDir })\n // For custom toolsets the kit lives within buildResourcesDir; enforce that constraint.\n // For versioned/cached bundles no base constraint is needed (paths are in the tool cache).\n const safeKitDir = sanitizeDirPath(kitDir, typeof winCodeSign === \"object\" ? this.packager.buildResourcesDir : undefined)\n const signtoolPath = path.join(safeKitDir, \"signtool.exe\")\n\n let dlibPath: string\n let dotnetRootPath: string | null = null\n\n if (typeof winCodeSign === \"string\") {\n // 1.3.0+: dlib ships in a separate ats-bundle with its full native dependency closure\n // (Ijwhost.dll, VC++ runtime, etc.). The .NET 8 framework is in a separate dotnet-runtime\n // bundle; DOTNET_ROOT tells Ijwhost where to find hostfxr.dll → shared framework.\n const safeAtsDir = sanitizeDirPath(await getAtsBundleDir(winCodeSign))\n dlibPath = path.join(safeAtsDir, arch === Arch.ia32 ? \"x86\" : \"x64\", \"Azure.CodeSigning.Dlib.dll\")\n dotnetRootPath = sanitizeDirPath(await getDotnetRuntimeDir(winCodeSign))\n } else {\n // Custom toolset: user provides the dlib alongside signtool in the kit dir.\n dlibPath = path.join(safeKitDir, \"Azure.CodeSigning.Dlib.dll\")\n }\n\n const metadataPath = await this.packager.getTempFile(\".json\")\n await _fsExtra.writeJson(metadataPath, {\n Endpoint: signing.endpoint,\n CodeSigningAccountName: signing.codeSigningAccountName,\n CertificateProfileName: signing.certificateProfileName,\n ...signing.additionalMetadata,\n })\n\n const args = [\n \"sign\",\n \"/fd\",\n (signing.fileDigest ?? \"SHA256\").toUpperCase(),\n \"/tr\",\n signing.timestampRfc3161 ?? \"http://timestamp.acs.microsoft.com\",\n \"/td\",\n (signing.timestampDigest ?? \"SHA256\").toUpperCase(),\n \"/dlib\",\n this.vm.toVmFile(dlibPath),\n \"/dmdf\",\n this.vm.toVmFile(metadataPath),\n this.vm.toVmFile(options.path),\n ]\n\n log.info(\n {\n file: log.filePath(options.path),\n endpoint: signing.endpoint,\n account: signing.codeSigningAccountName,\n profile: signing.certificateProfileName,\n },\n \"signing with Azure Trusted Signing (signtool /dlib)\"\n )\n\n // DOTNET_ROOT: Ijwhost.dll (shipped in the ats-bundle) reads this env var to locate\n // hostfxr.dll. On Wine, toVmFile converts the host path to a Z:\\ path that Wine resolves\n // back to the same location on the host filesystem.\n const execOptions = dotnetRootPath != null ? { env: { DOTNET_ROOT: this.vm.toVmFile(dotnetRootPath) } } : undefined\n await this.vm.exec(signtoolPath, args, execOptions)\n return true\n }\n}\n"]}
@@ -1,59 +1,2 @@
1
- import { MemoLazy } from "builder-util-runtime";
2
- import { Lazy } from "lazy-val";
3
- import { Target } from "../../core.js";
4
- import { WindowsConfiguration } from "../../options/winOptions.js";
5
- import { ToolInfo } from "../../util/bundledTool.js";
6
- import { VmManager } from "../../vm/vm.js";
7
- import { WinPackager } from "../../winPackager.js";
8
- import { SignManager } from "../signManager.js";
9
- import { WindowsSignOptions } from "./windowsCodeSign.js";
10
- export type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>;
11
- export interface WindowsSignToolOptions extends WindowsSignOptions {
12
- readonly name: string;
13
- readonly site: string | null;
14
- }
15
- export interface FileCodeSigningInfo {
16
- readonly file: string;
17
- readonly password: string | null;
18
- }
19
- export interface WindowsSignTaskConfiguration extends WindowsSignToolOptions {
20
- readonly cscInfo: FileCodeSigningInfo | CertificateFromStoreInfo | null;
21
- resultOutputPath?: string;
22
- hash: string;
23
- isNest: boolean;
24
- }
25
- export interface CustomWindowsSignTaskConfiguration extends WindowsSignTaskConfiguration {
26
- computeSignToolArgs(isWin: boolean): Array<string>;
27
- }
28
- export interface CertificateInfo {
29
- readonly commonName: string;
30
- readonly bloodyMicrosoftSubjectDn: string;
31
- }
32
- export interface CertificateFromStoreInfo {
33
- thumbprint: string;
34
- subject: string;
35
- store: string;
36
- isLocalMachineStore: boolean;
37
- }
38
- export declare class WindowsSignToolManager implements SignManager {
39
- private readonly packager;
40
- private readonly platformOptions;
41
- constructor(packager: WinPackager);
42
- readonly computedPublisherName: Lazy<string[] | null>;
43
- readonly lazyCertInfo: MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>;
44
- readonly cscInfo: MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>;
45
- initialize(): Promise<void>;
46
- computePublisherName(target: Target, publisherName: string): Promise<string>;
47
- signFile(options: WindowsSignOptions): Promise<boolean>;
48
- getCertInfo(file: string, password: string): Promise<CertificateInfo>;
49
- computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm?: VmManager): Array<string>;
50
- private computeWindowsSignArgs;
51
- private computeOsslsigncodeArgs;
52
- private addCertificateArgs;
53
- private addCommonSigningArgs;
54
- getOutputPath(inputPath: string, hash: string): string;
55
- getCertificateFromStoreInfo(options: WindowsConfiguration, vm: VmManager): Promise<CertificateFromStoreInfo>;
56
- getToolPath(isWin?: boolean): Promise<ToolInfo>;
57
- doSign(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager): Promise<void>;
58
- }
1
+ export { CertificateFromStoreInfo, CertificateInfo, CustomWindowsSign, CustomWindowsSignTaskConfiguration, FileCodeSigningInfo, getSigntoolFamilyConfig, SigntoolSignManager as WindowsSignToolManager, WindowsSignTaskConfiguration, WindowsSignToolOptions, } from "./signtoolBaseSignManager.js";
59
2
  //# sourceMappingURL=windowsSignToolManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"windowsSignToolManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/windowsSignToolManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"windowsSignToolManager.d.ts","sourceRoot":"","sources":["../../../src/codeSign/win/windowsSignToolManager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,kCAAkC,EAClC,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,IAAI,sBAAsB,EAC7C,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,8BAA8B,CAAA"}