app-builder-lib 26.9.1 → 26.11.0
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.
- package/out/ProtonFramework.d.ts +1 -1
- package/out/ProtonFramework.js +2 -2
- package/out/ProtonFramework.js.map +1 -1
- package/out/binDownload.d.ts +2 -18
- package/out/binDownload.js +33 -185
- package/out/binDownload.js.map +1 -1
- package/out/codeSign/windowsSignToolManager.js +1 -1
- package/out/codeSign/windowsSignToolManager.js.map +1 -1
- package/out/configuration.d.ts +100 -68
- package/out/configuration.js.map +1 -1
- package/out/core.d.ts +2 -2
- package/out/core.js.map +1 -1
- package/out/electron/ElectronFramework.d.ts +2 -19
- package/out/electron/ElectronFramework.js +47 -40
- package/out/electron/ElectronFramework.js.map +1 -1
- package/out/electron/injectFFMPEG.d.ts +10 -1
- package/out/electron/injectFFMPEG.js +48 -34
- package/out/electron/injectFFMPEG.js.map +1 -1
- package/out/frameworks/LibUiFramework.d.ts +3 -2
- package/out/frameworks/LibUiFramework.js +5 -2
- package/out/frameworks/LibUiFramework.js.map +1 -1
- package/out/index.d.ts +3 -2
- package/out/index.js +1 -1
- package/out/index.js.map +1 -1
- package/out/macPackager.js +24 -3
- package/out/macPackager.js.map +1 -1
- package/out/node-module-collector/moduleManager.d.ts +7 -1
- package/out/node-module-collector/moduleManager.js +9 -2
- package/out/node-module-collector/moduleManager.js.map +1 -1
- package/out/node-module-collector/nodeModulesCollector.js +5 -3
- package/out/node-module-collector/nodeModulesCollector.js.map +1 -1
- package/out/node-module-collector/pnpmNodeModulesCollector.d.ts +26 -2
- package/out/node-module-collector/pnpmNodeModulesCollector.js +98 -18
- package/out/node-module-collector/pnpmNodeModulesCollector.js.map +1 -1
- package/out/options/AppXOptions.d.ts +1 -1
- package/out/options/AppXOptions.js.map +1 -1
- package/out/options/PlatformSpecificBuildOptions.d.ts +31 -11
- package/out/options/PlatformSpecificBuildOptions.js.map +1 -1
- package/out/options/SnapOptions.d.ts +1 -1
- package/out/options/SnapOptions.js.map +1 -1
- package/out/options/linuxOptions.d.ts +38 -12
- package/out/options/linuxOptions.js.map +1 -1
- package/out/options/macOptions.d.ts +10 -7
- package/out/options/macOptions.js.map +1 -1
- package/out/options/metadata.d.ts +1 -2
- package/out/options/metadata.js.map +1 -1
- package/out/options/pkgOptions.d.ts +1 -1
- package/out/options/pkgOptions.js.map +1 -1
- package/out/options/winOptions.d.ts +15 -5
- package/out/options/winOptions.js.map +1 -1
- package/out/packager.js +12 -12
- package/out/packager.js.map +1 -1
- package/out/platformPackager.js +2 -5
- package/out/platformPackager.js.map +1 -1
- package/out/targets/FpmTarget.js +3 -2
- package/out/targets/FpmTarget.js.map +1 -1
- package/out/targets/LinuxTargetHelper.d.ts +4 -4
- package/out/targets/LinuxTargetHelper.js.map +1 -1
- package/out/targets/MsiTarget.js +1 -1
- package/out/targets/MsiTarget.js.map +1 -1
- package/out/targets/appimage/AppImageTarget.d.ts +1 -0
- package/out/targets/appimage/AppImageTarget.js +30 -10
- package/out/targets/appimage/AppImageTarget.js.map +1 -1
- package/out/targets/appimage/appImageUtil.d.ts +30 -2
- package/out/targets/appimage/appImageUtil.js +26 -24
- package/out/targets/appimage/appImageUtil.js.map +1 -1
- package/out/targets/appimage/appLauncher.d.ts +1 -1
- package/out/targets/appimage/appLauncher.js +7 -3
- package/out/targets/appimage/appLauncher.js.map +1 -1
- package/out/targets/archive.js +20 -6
- package/out/targets/archive.js.map +1 -1
- package/out/targets/nsis/NsisTarget.js +11 -11
- package/out/targets/nsis/NsisTarget.js.map +1 -1
- package/out/targets/nsis/nsisOptions.d.ts +20 -16
- package/out/targets/nsis/nsisOptions.js.map +1 -1
- package/out/targets/nsis/nsisScriptGenerator.d.ts +1 -0
- package/out/targets/nsis/nsisScriptGenerator.js +14 -1
- package/out/targets/nsis/nsisScriptGenerator.js.map +1 -1
- package/out/targets/nsis/nsisUtil.js +4 -3
- package/out/targets/nsis/nsisUtil.js.map +1 -1
- package/out/toolsets/linux.js +8 -8
- package/out/toolsets/linux.js.map +1 -1
- package/out/toolsets/windows.d.ts +16 -16
- package/out/toolsets/windows.js +29 -21
- package/out/toolsets/windows.js.map +1 -1
- package/out/util/NodeModuleCopyHelper.js +1 -1
- package/out/util/NodeModuleCopyHelper.js.map +1 -1
- package/out/util/appBuilder.js +1 -1
- package/out/util/appBuilder.js.map +1 -1
- package/out/util/cacheState.d.ts +28 -0
- package/out/util/cacheState.js +143 -0
- package/out/util/cacheState.js.map +1 -0
- package/out/util/electronGet.d.ts +56 -0
- package/out/util/electronGet.js +388 -0
- package/out/util/electronGet.js.map +1 -0
- package/out/util/macroExpander.js +3 -0
- package/out/util/macroExpander.js.map +1 -1
- package/out/util/resEdit.d.ts +10 -0
- package/out/util/resEdit.js +48 -0
- package/out/util/resEdit.js.map +1 -0
- package/out/util/resolve.d.ts +1 -1
- package/out/util/resolve.js +16 -1
- package/out/util/resolve.js.map +1 -1
- package/out/version.d.ts +1 -1
- package/out/version.js +1 -1
- package/out/version.js.map +1 -1
- package/out/vm/ParallelsVm.d.ts +16 -0
- package/out/vm/ParallelsVm.js +0 -1
- package/out/vm/ParallelsVm.js.map +1 -1
- package/out/winPackager.js +44 -42
- package/out/winPackager.js.map +1 -1
- package/package.json +11 -9
- package/scheme.json +672 -135
package/out/ProtonFramework.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { LibUiFramework } from "./frameworks/LibUiFramework";
|
|
|
4
4
|
export declare class ProtonFramework extends LibUiFramework {
|
|
5
5
|
readonly name = "proton";
|
|
6
6
|
readonly defaultAppIdPrefix = "com.proton-native.";
|
|
7
|
-
constructor(version: string,
|
|
7
|
+
constructor(version: string, macOsProductName: string, isUseLaunchUi: boolean);
|
|
8
8
|
getDefaultIcon(platform: Platform): string;
|
|
9
9
|
createTransformer(): FileTransformer | null;
|
|
10
10
|
}
|
package/out/ProtonFramework.js
CHANGED
|
@@ -8,8 +8,8 @@ const fileTransformer_1 = require("./fileTransformer");
|
|
|
8
8
|
const LibUiFramework_1 = require("./frameworks/LibUiFramework");
|
|
9
9
|
const pathManager_1 = require("./util/pathManager");
|
|
10
10
|
class ProtonFramework extends LibUiFramework_1.LibUiFramework {
|
|
11
|
-
constructor(version,
|
|
12
|
-
super(version,
|
|
11
|
+
constructor(version, macOsProductName, isUseLaunchUi) {
|
|
12
|
+
super(version, macOsProductName, isUseLaunchUi);
|
|
13
13
|
this.name = "proton";
|
|
14
14
|
// noinspection JSUnusedGlobalSymbols
|
|
15
15
|
this.defaultAppIdPrefix = "com.proton-native.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProtonFramework.js","sourceRoot":"","sources":["../src/ProtonFramework.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileTransformer, log } from \"builder-util\"\nimport { safeStringifyJson } from \"builder-util-runtime\"\nimport { Platform } from \"./core\"\nimport { NODE_MODULES_PATTERN } from \"./fileTransformer\"\nimport { LibUiFramework } from \"./frameworks/LibUiFramework\"\nimport { getTemplatePath } from \"./util/pathManager\"\n\nexport class ProtonFramework extends LibUiFramework {\n readonly name = \"proton\"\n\n // noinspection JSUnusedGlobalSymbols\n readonly defaultAppIdPrefix = \"com.proton-native.\"\n\n constructor(version: string,
|
|
1
|
+
{"version":3,"file":"ProtonFramework.js","sourceRoot":"","sources":["../src/ProtonFramework.ts"],"names":[],"mappings":"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","sourcesContent":["import { FileTransformer, log } from \"builder-util\"\nimport { safeStringifyJson } from \"builder-util-runtime\"\nimport { Platform } from \"./core\"\nimport { NODE_MODULES_PATTERN } from \"./fileTransformer\"\nimport { LibUiFramework } from \"./frameworks/LibUiFramework\"\nimport { getTemplatePath } from \"./util/pathManager\"\n\nexport class ProtonFramework extends LibUiFramework {\n readonly name = \"proton\"\n\n // noinspection JSUnusedGlobalSymbols\n readonly defaultAppIdPrefix = \"com.proton-native.\"\n\n constructor(version: string, macOsProductName: string, isUseLaunchUi: boolean) {\n super(version, macOsProductName, isUseLaunchUi)\n }\n\n getDefaultIcon(platform: Platform): string {\n if (platform === Platform.WINDOWS) {\n return getTemplatePath(\"icons/proton-native/proton-native.ico\")\n } else if (platform === Platform.LINUX) {\n return getTemplatePath(\"icons/proton-native/linux\")\n } else {\n return getTemplatePath(\"icons/proton-native/proton-native.icns\")\n }\n }\n\n createTransformer(): FileTransformer | null {\n let babel: any\n const babelOptions: any = { ast: false, sourceMaps: \"inline\" }\n if (process.env.TEST_SET_BABEL_PRESET === \"true\") {\n babel = require(\"@babel/core\")\n\n babel = testOnlyBabel(babel, babelOptions, this.version)\n } else {\n try {\n babel = require(\"babel-core\")\n } catch (_e: any) {\n // babel isn't installed\n log.debug(null, \"don't transpile source code using Babel\")\n return null\n }\n }\n\n log.info(\n {\n options: safeStringifyJson(babelOptions, new Set<string>([\"presets\"])),\n },\n \"transpile source code using Babel\"\n )\n return (file): Promise<any> | null => {\n if (!(file.endsWith(\".js\") || file.endsWith(\".jsx\")) || file.includes(NODE_MODULES_PATTERN)) {\n return null\n }\n\n return new Promise((resolve, reject) => {\n return babel.transformFile(file, babelOptions, (error: Error, result: any) => {\n if (error == null) {\n resolve(result.code)\n } else {\n reject(error)\n }\n })\n })\n }\n }\n}\n\nfunction testOnlyBabel(babel: any, babelOptions: any, nodeVersion: string): any {\n // out test dir can be located outside of electron-builder node_modules and babel cannot resolve string names of preset\n babelOptions.presets = [[require(\"@babel/preset-env\").default, { targets: { node: nodeVersion } }], require(\"@babel/preset-react\")]\n babelOptions.plugins = [\n // stage 0\n require(\"@babel/plugin-proposal-function-bind\").default,\n\n // stage 1\n require(\"@babel/plugin-proposal-export-default-from\").default,\n require(\"@babel/plugin-proposal-logical-assignment-operators\").default,\n [require(\"@babel/plugin-proposal-optional-chaining\").default, { loose: false }],\n [require(\"@babel/plugin-proposal-pipeline-operator\").default, { proposal: \"minimal\" }],\n [require(\"@babel/plugin-proposal-nullish-coalescing-operator\").default, { loose: false }],\n require(\"@babel/plugin-proposal-do-expressions\").default,\n\n // stage 2\n [require(\"@babel/plugin-proposal-decorators\").default, { legacy: true }],\n require(\"@babel/plugin-proposal-function-sent\").default,\n require(\"@babel/plugin-proposal-export-namespace-from\").default,\n require(\"@babel/plugin-proposal-numeric-separator\").default,\n require(\"@babel/plugin-proposal-throw-expressions\").default,\n\n // stage 3\n require(\"@babel/plugin-syntax-dynamic-import\").default,\n require(\"@babel/plugin-syntax-import-meta\").default,\n [require(\"@babel/plugin-proposal-class-properties\").default, { loose: false }],\n require(\"@babel/plugin-proposal-json-strings\").default,\n ]\n babelOptions.babelrc = false\n return babel\n}\n"]}
|
package/out/binDownload.d.ts
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
* Deterministic <length>-character URL-safe hash (a–z0–9)
|
|
3
|
-
*/
|
|
4
|
-
export declare function hashUrlSafe(input: string, length?: number): string;
|
|
5
|
-
/**
|
|
6
|
-
* Get cache directory for electron-builder
|
|
7
|
-
*/
|
|
8
|
-
export declare function getCacheDirectory(isAvoidSystemOnWindows?: boolean): string;
|
|
9
|
-
/**
|
|
10
|
-
* Downloads an artifact from GitHub releases (convenience wrapper)
|
|
11
|
-
*/
|
|
12
|
-
export declare function downloadArtifact(options: {
|
|
13
|
-
releaseName: string;
|
|
14
|
-
filenameWithExt: string;
|
|
15
|
-
checksums: Record<string, string>;
|
|
16
|
-
githubOrgRepo?: string;
|
|
17
|
-
}): Promise<string>;
|
|
1
|
+
import { Nullish } from "builder-util-runtime";
|
|
18
2
|
export declare function download(url: string, output: string, checksum?: string | null): Promise<void>;
|
|
19
3
|
export declare function getBinFromCustomLoc(name: string, version: string, binariesLocUrl: string, checksum: string): Promise<string>;
|
|
20
4
|
export declare function getBinFromUrl(releaseName: string, filenameWithExt: string, checksum: string, githubOrgRepo?: string): Promise<string>;
|
|
21
|
-
export declare function getBin(cacheKey: string, url?: string |
|
|
5
|
+
export declare function getBin(cacheKey: string, url?: string | Nullish, checksum?: string | Nullish): Promise<string>;
|
package/out/binDownload.js
CHANGED
|
@@ -1,184 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hashUrlSafe = hashUrlSafe;
|
|
4
|
-
exports.getCacheDirectory = getCacheDirectory;
|
|
5
|
-
exports.downloadArtifact = downloadArtifact;
|
|
6
3
|
exports.download = download;
|
|
7
4
|
exports.getBinFromCustomLoc = getBinFromCustomLoc;
|
|
8
5
|
exports.getBinFromUrl = getBinFromUrl;
|
|
9
6
|
exports.getBin = getBin;
|
|
10
7
|
const get = require("@electron/get");
|
|
11
8
|
const get_1 = require("@electron/get");
|
|
9
|
+
const fs = require("fs/promises");
|
|
12
10
|
const builder_util_1 = require("builder-util");
|
|
13
11
|
const filename_1 = require("builder-util/out/filename");
|
|
14
|
-
const multiProgress_1 = require("electron-publish/out/multiProgress");
|
|
15
|
-
const fs = require("fs/promises");
|
|
16
|
-
const os = require("os");
|
|
17
12
|
const path = require("path");
|
|
18
|
-
const
|
|
19
|
-
const tar = require("tar");
|
|
20
|
-
/**
|
|
21
|
-
* Deterministic <length>-character URL-safe hash (a–z0–9)
|
|
22
|
-
*/
|
|
23
|
-
function hashUrlSafe(input, length = 6) {
|
|
24
|
-
let hash = 5381;
|
|
25
|
-
for (let i = 0; i < input.length; i++) {
|
|
26
|
-
hash = ((hash << 5) + hash) ^ input.charCodeAt(i); // hash * 33 ^ c
|
|
27
|
-
}
|
|
28
|
-
// Force unsigned 32-bit
|
|
29
|
-
hash >>>= 0;
|
|
30
|
-
// Base-36 (0–9a–z)
|
|
31
|
-
const out = hash.toString(36);
|
|
32
|
-
// Ensure exactly `length` chars
|
|
33
|
-
if (out.length >= length) {
|
|
34
|
-
return out.slice(0, length);
|
|
35
|
-
}
|
|
36
|
-
return out.padStart(length, "0");
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Get cache directory for electron-builder
|
|
40
|
-
*/
|
|
41
|
-
function getCacheDirectory(isAvoidSystemOnWindows = false) {
|
|
42
|
-
var _a, _b, _c, _d, _e;
|
|
43
|
-
const env = (_a = process.env.ELECTRON_BUILDER_CACHE) === null || _a === void 0 ? void 0 : _a.trim();
|
|
44
|
-
if (env) {
|
|
45
|
-
return env;
|
|
46
|
-
}
|
|
47
|
-
const appName = "electron-builder";
|
|
48
|
-
const platform = os.platform();
|
|
49
|
-
const homeDir = os.homedir();
|
|
50
|
-
if (platform === "darwin") {
|
|
51
|
-
return path.join(homeDir, "Library", "Caches", appName);
|
|
52
|
-
}
|
|
53
|
-
if (platform === "win32") {
|
|
54
|
-
const localAppData = (_b = process.env.LOCALAPPDATA) === null || _b === void 0 ? void 0 : _b.trim();
|
|
55
|
-
const username = (_d = (_c = process.env.USERNAME) === null || _c === void 0 ? void 0 : _c.trim()) === null || _d === void 0 ? void 0 : _d.toLowerCase();
|
|
56
|
-
const isSystemUser = isAvoidSystemOnWindows && (((_e = localAppData === null || localAppData === void 0 ? void 0 : localAppData.toLowerCase()) === null || _e === void 0 ? void 0 : _e.includes("\\windows\\system32\\")) || username === "system");
|
|
57
|
-
if (!localAppData || isSystemUser) {
|
|
58
|
-
return path.join(os.tmpdir(), `${appName}-cache`);
|
|
59
|
-
}
|
|
60
|
-
return path.join(localAppData, appName, "Cache");
|
|
61
|
-
}
|
|
62
|
-
// linux
|
|
63
|
-
const xdgCache = process.env.XDG_CACHE_HOME;
|
|
64
|
-
if (xdgCache) {
|
|
65
|
-
return path.join(xdgCache, appName);
|
|
66
|
-
}
|
|
67
|
-
return path.join(homeDir, ".cache", appName);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Downloads an artifact from GitHub releases (convenience wrapper)
|
|
71
|
-
*/
|
|
72
|
-
async function downloadArtifact(options) {
|
|
73
|
-
const { releaseName, filenameWithExt, checksums, githubOrgRepo = "electron-userland/electron-builder-binaries" } = options;
|
|
74
|
-
const baseUrl = getBinariesMirrorUrl(githubOrgRepo);
|
|
75
|
-
const file = await _downloadArtifact(baseUrl, releaseName, filenameWithExt, checksums);
|
|
76
|
-
return file;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Downloads, validates, and extracts a .tar.gz from a release URL
|
|
80
|
-
*/
|
|
81
|
-
async function _downloadArtifact(baseUrl, releaseName, filenameWithExt, checksums) {
|
|
82
|
-
var _a;
|
|
83
|
-
const suffix = hashUrlSafe(`${baseUrl}-${releaseName}-${filenameWithExt}`, 5);
|
|
84
|
-
const folderName = `${filenameWithExt.replace(/\.(tar\.gz|tgz)$/, "")}-${suffix}`;
|
|
85
|
-
const extractDir = path.join(getCacheDirectory(), releaseName, folderName);
|
|
86
|
-
const extractionCompleteMarker = `${extractDir}.complete`;
|
|
87
|
-
// Ensure download directory exists before trying to lock
|
|
88
|
-
await fs.mkdir(extractDir, { recursive: true });
|
|
89
|
-
// Acquire the lock
|
|
90
|
-
let release;
|
|
91
|
-
try {
|
|
92
|
-
release = await lockfile.lock(extractDir, {
|
|
93
|
-
retries: {
|
|
94
|
-
retries: 5,
|
|
95
|
-
minTimeout: 1000,
|
|
96
|
-
maxTimeout: 5000,
|
|
97
|
-
},
|
|
98
|
-
stale: 60000,
|
|
99
|
-
});
|
|
100
|
-
const varName = "ELECTRON_DOWNLOAD_CACHE_MODE";
|
|
101
|
-
const cacheOverride = (_a = process.env[varName]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
102
|
-
let cacheMode = get_1.ElectronDownloadCacheMode.ReadWrite;
|
|
103
|
-
if (cacheOverride && Number(cacheOverride) in get_1.ElectronDownloadCacheMode) {
|
|
104
|
-
cacheMode = Number(cacheOverride);
|
|
105
|
-
builder_util_1.log.debug({ mode: cacheMode }, `cache mode overridden via env var ${varName}`);
|
|
106
|
-
}
|
|
107
|
-
if (await (0, builder_util_1.exists)(extractionCompleteMarker)) {
|
|
108
|
-
builder_util_1.log.debug({ file: filenameWithExt, path: extractDir }, "using cached artifact - skipping download/extract");
|
|
109
|
-
return extractDir;
|
|
110
|
-
}
|
|
111
|
-
// These are just stubs. Actual url construction/file naming are in `mirrorOptions` below.
|
|
112
|
-
const details = {
|
|
113
|
-
// Needs to be higher than 1.3.2 to avoid @electron/get validation shortcut
|
|
114
|
-
// https://github.com/electron/get/blob/05c466d4fc60fa0c83064df28dce245eb83d63c9/src/index.ts#L60
|
|
115
|
-
version: "9.9.9",
|
|
116
|
-
artifactName: filenameWithExt, // also is the output filename
|
|
117
|
-
};
|
|
118
|
-
const progress = process.stdout.isTTY ? new multiProgress_1.MultiProgress() : null;
|
|
119
|
-
const progressBar = progress === null || progress === void 0 ? void 0 : progress.createBar(`${" ".repeat(builder_util_1.PADDING + 2)}[:bar] :percent | ${filenameWithExt}`, { total: 100 });
|
|
120
|
-
const downloadOptions = {
|
|
121
|
-
getProgressCallback: info => {
|
|
122
|
-
progressBar === null || progressBar === void 0 ? void 0 : progressBar.update(info.percent != null ? Math.floor(info.percent * 100) : 0);
|
|
123
|
-
return Promise.resolve();
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
const options = {
|
|
127
|
-
cacheRoot: path.resolve(getCacheDirectory(), "downloads"),
|
|
128
|
-
cacheMode,
|
|
129
|
-
downloadOptions,
|
|
130
|
-
checksums,
|
|
131
|
-
mirrorOptions: {
|
|
132
|
-
// `${opts.mirror}${opts.customDir}/${opts.customFilename}`
|
|
133
|
-
mirror: baseUrl,
|
|
134
|
-
customDir: releaseName,
|
|
135
|
-
customFilename: filenameWithExt,
|
|
136
|
-
},
|
|
137
|
-
};
|
|
138
|
-
builder_util_1.log.info({ release: releaseName, file: filenameWithExt }, "downloading");
|
|
139
|
-
progressBar === null || progressBar === void 0 ? void 0 : progressBar.render();
|
|
140
|
-
const downloadedFile = await get.downloadArtifact({
|
|
141
|
-
...details,
|
|
142
|
-
...options,
|
|
143
|
-
isGeneric: true,
|
|
144
|
-
});
|
|
145
|
-
await tar.extract({
|
|
146
|
-
file: downloadedFile,
|
|
147
|
-
cwd: extractDir,
|
|
148
|
-
strip: 1, // Strip the top-level directory from the archive
|
|
149
|
-
});
|
|
150
|
-
// Write the extraction complete marker file to indicate successful extraction and prevent future re-extraction
|
|
151
|
-
await fs.writeFile(extractionCompleteMarker, "");
|
|
152
|
-
builder_util_1.log.debug({ file: filenameWithExt, path: extractDir }, "downloaded");
|
|
153
|
-
progressBar === null || progressBar === void 0 ? void 0 : progressBar.update(100);
|
|
154
|
-
progressBar === null || progressBar === void 0 ? void 0 : progressBar.terminate();
|
|
155
|
-
return extractDir;
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
// Release the lock
|
|
159
|
-
if (release) {
|
|
160
|
-
await release();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
13
|
+
const electronGet_1 = require("./util/electronGet");
|
|
164
14
|
const versionToPromise = new Map();
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
const args = ["download", "--url", url, "--output", output];
|
|
178
|
-
if (checksum != null) {
|
|
179
|
-
args.push("--sha512", checksum);
|
|
180
|
-
}
|
|
181
|
-
return (0, builder_util_1.executeAppBuilder)(args);
|
|
15
|
+
async function download(url, output, checksum) {
|
|
16
|
+
const filenameWithExt = path.basename(new URL(url).pathname);
|
|
17
|
+
const downloadedFile = await get.downloadArtifact({
|
|
18
|
+
version: "9.9.9",
|
|
19
|
+
artifactName: filenameWithExt,
|
|
20
|
+
cacheRoot: path.resolve((0, electronGet_1.getCacheDirectory)(), "downloads"),
|
|
21
|
+
cacheMode: get_1.ElectronDownloadCacheMode.ReadWrite,
|
|
22
|
+
...(checksum != null ? { checksums: { [filenameWithExt]: checksum } } : { unsafelyDisableChecksums: true }),
|
|
23
|
+
mirrorOptions: { resolveAssetURL: async () => Promise.resolve(url) },
|
|
24
|
+
isGeneric: true,
|
|
25
|
+
});
|
|
26
|
+
await fs.copyFile(downloadedFile, output);
|
|
182
27
|
}
|
|
183
28
|
function getBinFromCustomLoc(name, version, binariesLocUrl, checksum) {
|
|
184
29
|
const dirName = `${name}-${version}`;
|
|
@@ -186,11 +31,12 @@ function getBinFromCustomLoc(name, version, binariesLocUrl, checksum) {
|
|
|
186
31
|
}
|
|
187
32
|
function getBinFromUrl(releaseName, filenameWithExt, checksum, githubOrgRepo = "electron-userland/electron-builder-binaries") {
|
|
188
33
|
let url;
|
|
189
|
-
|
|
190
|
-
|
|
34
|
+
const overrideUrl = (0, builder_util_1.parseValidEnvVarUrl)("ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL");
|
|
35
|
+
if (overrideUrl != null) {
|
|
36
|
+
url = overrideUrl + "/" + filenameWithExt;
|
|
191
37
|
}
|
|
192
38
|
else {
|
|
193
|
-
const baseUrl = getBinariesMirrorUrl(githubOrgRepo);
|
|
39
|
+
const baseUrl = (0, electronGet_1.getBinariesMirrorUrl)(githubOrgRepo);
|
|
194
40
|
const middleUrl = process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||
|
|
195
41
|
process.env.npm_config_electron_builder_binaries_custom_dir ||
|
|
196
42
|
process.env.npm_package_config_electron_builder_binaries_custom_dir ||
|
|
@@ -203,24 +49,26 @@ function getBinFromUrl(releaseName, filenameWithExt, checksum, githubOrgRepo = "
|
|
|
203
49
|
}
|
|
204
50
|
function getBin(cacheKey, url, checksum) {
|
|
205
51
|
var _a;
|
|
206
|
-
// Old cache is ignored if cache environment variable changes
|
|
207
52
|
const cacheName = (0, filename_1.sanitizeFileName)(`${(_a = process.env.ELECTRON_BUILDER_CACHE) !== null && _a !== void 0 ? _a : ""}${cacheKey}`);
|
|
208
|
-
let promise = versionToPromise.get(cacheName);
|
|
53
|
+
let promise = versionToPromise.get(cacheName);
|
|
209
54
|
if (promise != null) {
|
|
210
55
|
return promise;
|
|
211
56
|
}
|
|
212
|
-
|
|
57
|
+
if (url == null) {
|
|
58
|
+
throw new Error(`getBin("${cacheKey}"): a download URL is required. ` +
|
|
59
|
+
`The no-URL legacy path (e.g. winCodeSign "0.0.0") is no longer used — ` +
|
|
60
|
+
`it now downloads from winCodeSign-2.6.0 automatically.`);
|
|
61
|
+
}
|
|
62
|
+
const filenameWithExt = path.basename(url);
|
|
63
|
+
const overrideUrl = url.substring(0, url.lastIndexOf("/"));
|
|
64
|
+
const releaseName = path.basename(overrideUrl);
|
|
65
|
+
promise = (0, electronGet_1.downloadBuilderToolset)({
|
|
66
|
+
releaseName,
|
|
67
|
+
filenameWithExt,
|
|
68
|
+
checksums: checksum != null ? { [filenameWithExt]: checksum } : undefined,
|
|
69
|
+
overrideUrl,
|
|
70
|
+
});
|
|
213
71
|
versionToPromise.set(cacheName, promise);
|
|
214
72
|
return promise;
|
|
215
73
|
}
|
|
216
|
-
function doGetBin(name, url, checksum) {
|
|
217
|
-
const args = ["download-artifact", "--name", name];
|
|
218
|
-
if (url != null) {
|
|
219
|
-
args.push("--url", url);
|
|
220
|
-
}
|
|
221
|
-
if (checksum != null) {
|
|
222
|
-
args.push("--sha512", checksum);
|
|
223
|
-
}
|
|
224
|
-
return (0, builder_util_1.executeAppBuilder)(args);
|
|
225
|
-
}
|
|
226
74
|
//# sourceMappingURL=binDownload.js.map
|
package/out/binDownload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binDownload.js","sourceRoot":"","sources":["../src/binDownload.ts"],"names":[],"mappings":"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","sourcesContent":["import * as get from \"@electron/get\"\nimport { ElectronDownloadCacheMode, ElectronDownloadRequest, ElectronDownloadRequestOptions, GotDownloaderOptions } from \"@electron/get\"\nimport { executeAppBuilder, exists, log, PADDING } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport { MultiProgress } from \"electron-publish/out/multiProgress\"\nimport * as fs from \"fs/promises\"\nimport * as os from \"os\"\nimport * as path from \"path\"\nimport * as lockfile from \"proper-lockfile\"\nimport * as tar from \"tar\"\n\n/**\n * Deterministic <length>-character URL-safe hash (a–z0–9)\n */\nexport function hashUrlSafe(input: string, length = 6): string {\n let hash = 5381\n for (let i = 0; i < input.length; i++) {\n hash = ((hash << 5) + hash) ^ input.charCodeAt(i) // hash * 33 ^ c\n }\n // Force unsigned 32-bit\n hash >>>= 0\n // Base-36 (0–9a–z)\n const out = hash.toString(36)\n // Ensure exactly `length` chars\n if (out.length >= length) {\n return out.slice(0, length)\n }\n return out.padStart(length, \"0\")\n}\n\n/**\n * Get cache directory for electron-builder\n */\nexport function getCacheDirectory(isAvoidSystemOnWindows = false): string {\n const env = process.env.ELECTRON_BUILDER_CACHE?.trim()\n if (env) {\n return env\n }\n\n const appName = \"electron-builder\"\n\n const platform = os.platform()\n const homeDir = os.homedir()\n\n if (platform === \"darwin\") {\n return path.join(homeDir, \"Library\", \"Caches\", appName)\n }\n\n if (platform === \"win32\") {\n const localAppData = process.env.LOCALAPPDATA?.trim()\n const username = process.env.USERNAME?.trim()?.toLowerCase()\n const isSystemUser = isAvoidSystemOnWindows && (localAppData?.toLowerCase()?.includes(\"\\\\windows\\\\system32\\\\\") || username === \"system\")\n if (!localAppData || isSystemUser) {\n return path.join(os.tmpdir(), `${appName}-cache`)\n }\n return path.join(localAppData, appName, \"Cache\")\n }\n\n // linux\n const xdgCache = process.env.XDG_CACHE_HOME\n if (xdgCache) {\n return path.join(xdgCache, appName)\n }\n\n return path.join(homeDir, \".cache\", appName)\n}\n\n/**\n * Downloads an artifact from GitHub releases (convenience wrapper)\n */\nexport async function downloadArtifact(options: { releaseName: string; filenameWithExt: string; checksums: Record<string, string>; githubOrgRepo?: string }): Promise<string> {\n const { releaseName, filenameWithExt, checksums, githubOrgRepo = \"electron-userland/electron-builder-binaries\" } = options\n\n const baseUrl = getBinariesMirrorUrl(githubOrgRepo)\n const file = await _downloadArtifact(baseUrl, releaseName, filenameWithExt, checksums)\n\n return file\n}\n\n/**\n * Downloads, validates, and extracts a .tar.gz from a release URL\n */\nasync function _downloadArtifact(baseUrl: string, releaseName: string, filenameWithExt: string, checksums: Record<string, string>): Promise<string> {\n const suffix = hashUrlSafe(`${baseUrl}-${releaseName}-${filenameWithExt}`, 5)\n const folderName = `${filenameWithExt.replace(/\\.(tar\\.gz|tgz)$/, \"\")}-${suffix}`\n const extractDir = path.join(getCacheDirectory(), releaseName, folderName)\n const extractionCompleteMarker = `${extractDir}.complete`\n\n // Ensure download directory exists before trying to lock\n await fs.mkdir(extractDir, { recursive: true })\n\n // Acquire the lock\n let release: (() => Promise<void>) | undefined\n try {\n release = await lockfile.lock(extractDir, {\n retries: {\n retries: 5,\n minTimeout: 1000,\n maxTimeout: 5000,\n },\n stale: 60000,\n })\n\n const varName = \"ELECTRON_DOWNLOAD_CACHE_MODE\"\n const cacheOverride = process.env[varName]?.trim()\n\n let cacheMode: ElectronDownloadCacheMode = ElectronDownloadCacheMode.ReadWrite\n if (cacheOverride && Number(cacheOverride) in ElectronDownloadCacheMode) {\n cacheMode = Number(cacheOverride)\n log.debug({ mode: cacheMode }, `cache mode overridden via env var ${varName}`)\n }\n\n if (await exists(extractionCompleteMarker)) {\n log.debug({ file: filenameWithExt, path: extractDir }, \"using cached artifact - skipping download/extract\")\n return extractDir\n }\n\n // These are just stubs. Actual url construction/file naming are in `mirrorOptions` below.\n const details: ElectronDownloadRequest = {\n // Needs to be higher than 1.3.2 to avoid @electron/get validation shortcut\n // https://github.com/electron/get/blob/05c466d4fc60fa0c83064df28dce245eb83d63c9/src/index.ts#L60\n version: \"9.9.9\",\n artifactName: filenameWithExt, // also is the output filename\n }\n\n const progress = process.stdout.isTTY ? new MultiProgress() : null\n const progressBar = progress?.createBar(`${\" \".repeat(PADDING + 2)}[:bar] :percent | ${filenameWithExt}`, { total: 100 })\n\n const downloadOptions: GotDownloaderOptions = {\n getProgressCallback: info => {\n progressBar?.update(info.percent != null ? Math.floor(info.percent * 100) : 0)\n return Promise.resolve()\n },\n }\n const options: ElectronDownloadRequestOptions = {\n cacheRoot: path.resolve(getCacheDirectory(), \"downloads\"),\n cacheMode,\n downloadOptions,\n checksums,\n mirrorOptions: {\n // `${opts.mirror}${opts.customDir}/${opts.customFilename}`\n mirror: baseUrl,\n customDir: releaseName,\n customFilename: filenameWithExt,\n },\n }\n\n log.info({ release: releaseName, file: filenameWithExt }, \"downloading\")\n progressBar?.render()\n const downloadedFile = await get.downloadArtifact({\n ...details,\n ...options,\n isGeneric: true,\n })\n\n await tar.extract({\n file: downloadedFile,\n cwd: extractDir,\n strip: 1, // Strip the top-level directory from the archive\n })\n\n // Write the extraction complete marker file to indicate successful extraction and prevent future re-extraction\n await fs.writeFile(extractionCompleteMarker, \"\")\n\n log.debug({ file: filenameWithExt, path: extractDir }, \"downloaded\")\n progressBar?.update(100)\n progressBar?.terminate()\n\n return extractDir\n } finally {\n // Release the lock\n if (release) {\n await release()\n }\n }\n}\n\nconst versionToPromise = new Map<string, Promise<string>>()\n\n/**\n * Get the binaries mirror URL from environment variables.\n * Supports various npm config formats and falls back to GitHub.\n */\nfunction getBinariesMirrorUrl(githubOrgRepo: string): string {\n return (\n process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_MIRROR ||\n process.env.npm_config_electron_builder_binaries_mirror ||\n process.env.npm_package_config_electron_builder_binaries_mirror ||\n process.env.ELECTRON_BUILDER_BINARIES_MIRROR ||\n `https://github.com/${githubOrgRepo}/releases/download/`\n )\n}\n\nexport function download(url: string, output: string, checksum?: string | null): Promise<void> {\n const args = [\"download\", \"--url\", url, \"--output\", output]\n if (checksum != null) {\n args.push(\"--sha512\", checksum)\n }\n return executeAppBuilder(args) as Promise<any>\n}\n\nexport function getBinFromCustomLoc(name: string, version: string, binariesLocUrl: string, checksum: string): Promise<string> {\n const dirName = `${name}-${version}`\n return getBin(dirName, binariesLocUrl, checksum)\n}\n\nexport function getBinFromUrl(releaseName: string, filenameWithExt: string, checksum: string, githubOrgRepo = \"electron-userland/electron-builder-binaries\"): Promise<string> {\n let url: string\n if (process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL) {\n url = process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL + \"/\" + filenameWithExt\n } else {\n const baseUrl = getBinariesMirrorUrl(githubOrgRepo)\n const middleUrl =\n process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n process.env.npm_config_electron_builder_binaries_custom_dir ||\n process.env.npm_package_config_electron_builder_binaries_custom_dir ||\n process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n releaseName\n url = `${baseUrl}${middleUrl}/${filenameWithExt}`\n }\n\n const cacheKey = `${releaseName}-${path.basename(filenameWithExt, path.extname(filenameWithExt))}`\n return getBin(cacheKey, url, checksum)\n}\n\nexport function getBin(cacheKey: string, url?: string | null, checksum?: string | null): Promise<string> {\n // Old cache is ignored if cache environment variable changes\n const cacheName = sanitizeFileName(`${process.env.ELECTRON_BUILDER_CACHE ?? \"\"}${cacheKey}`)\n let promise = versionToPromise.get(cacheName) // if rejected, we will try to download again\n\n if (promise != null) {\n return promise\n }\n\n promise = doGetBin(cacheKey, url, checksum)\n versionToPromise.set(cacheName, promise)\n return promise\n}\n\nfunction doGetBin(name: string, url: string | Nullish, checksum: string | Nullish): Promise<string> {\n const args = [\"download-artifact\", \"--name\", name]\n if (url != null) {\n args.push(\"--url\", url)\n }\n if (checksum != null) {\n args.push(\"--sha512\", checksum)\n }\n return executeAppBuilder(args)\n}\n"]}
|
|
1
|
+
{"version":3,"file":"binDownload.js","sourceRoot":"","sources":["../src/binDownload.ts"],"names":[],"mappings":"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","sourcesContent":["import * as get from \"@electron/get\"\nimport { ElectronDownloadCacheMode } from \"@electron/get\"\nimport * as fs from \"fs/promises\"\nimport { parseValidEnvVarUrl } from \"builder-util\"\nimport { Nullish } from \"builder-util-runtime\"\nimport { sanitizeFileName } from \"builder-util/out/filename\"\nimport * as path from \"path\"\nimport { downloadBuilderToolset, getBinariesMirrorUrl, getCacheDirectory } from \"./util/electronGet\"\n\nconst versionToPromise = new Map<string, Promise<string>>()\n\nexport async function download(url: string, output: string, checksum?: string | null): Promise<void> {\n const filenameWithExt = path.basename(new URL(url).pathname)\n const downloadedFile = await get.downloadArtifact({\n version: \"9.9.9\",\n artifactName: filenameWithExt,\n cacheRoot: path.resolve(getCacheDirectory(), \"downloads\"),\n cacheMode: ElectronDownloadCacheMode.ReadWrite,\n ...(checksum != null ? { checksums: { [filenameWithExt]: checksum } } : { unsafelyDisableChecksums: true }),\n mirrorOptions: { resolveAssetURL: async () => Promise.resolve(url) },\n isGeneric: true,\n })\n await fs.copyFile(downloadedFile, output)\n}\n\nexport function getBinFromCustomLoc(name: string, version: string, binariesLocUrl: string, checksum: string): Promise<string> {\n const dirName = `${name}-${version}`\n return getBin(dirName, binariesLocUrl, checksum)\n}\n\nexport function getBinFromUrl(releaseName: string, filenameWithExt: string, checksum: string, githubOrgRepo = \"electron-userland/electron-builder-binaries\"): Promise<string> {\n let url: string\n const overrideUrl = parseValidEnvVarUrl(\"ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL\")\n if (overrideUrl != null) {\n url = overrideUrl + \"/\" + filenameWithExt\n } else {\n const baseUrl = getBinariesMirrorUrl(githubOrgRepo)\n const middleUrl =\n process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n process.env.npm_config_electron_builder_binaries_custom_dir ||\n process.env.npm_package_config_electron_builder_binaries_custom_dir ||\n process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||\n releaseName\n url = `${baseUrl}${middleUrl}/${filenameWithExt}`\n }\n\n const cacheKey = `${releaseName}-${path.basename(filenameWithExt, path.extname(filenameWithExt))}`\n return getBin(cacheKey, url, checksum)\n}\n\nexport function getBin(cacheKey: string, url?: string | Nullish, checksum?: string | Nullish): Promise<string> {\n const cacheName = sanitizeFileName(`${process.env.ELECTRON_BUILDER_CACHE ?? \"\"}${cacheKey}`)\n let promise = versionToPromise.get(cacheName)\n if (promise != null) {\n return promise\n }\n\n if (url == null) {\n throw new Error(\n `getBin(\"${cacheKey}\"): a download URL is required. ` +\n `The no-URL legacy path (e.g. winCodeSign \"0.0.0\") is no longer used — ` +\n `it now downloads from winCodeSign-2.6.0 automatically.`\n )\n }\n\n const filenameWithExt = path.basename(url)\n const overrideUrl = url.substring(0, url.lastIndexOf(\"/\"))\n const releaseName = path.basename(overrideUrl)\n\n promise = downloadBuilderToolset({\n releaseName,\n filenameWithExt,\n checksums: checksum != null ? { [filenameWithExt]: checksum } : undefined,\n overrideUrl,\n })\n versionToPromise.set(cacheName, promise)\n return promise\n}\n"]}
|
|
@@ -129,7 +129,7 @@ class WindowsSignToolManager {
|
|
|
129
129
|
}
|
|
130
130
|
const name = this.packager.appInfo.productName;
|
|
131
131
|
const site = await this.packager.appInfo.computePackageUrl();
|
|
132
|
-
const customSign = await (0, resolve_1.resolveFunction)(this.packager.appInfo.type, (_b = options.options.signtoolOptions) === null || _b === void 0 ? void 0 : _b.sign, "sign");
|
|
132
|
+
const customSign = await (0, resolve_1.resolveFunction)(this.packager.appInfo.type, (_b = options.options.signtoolOptions) === null || _b === void 0 ? void 0 : _b.sign, "sign", await this.packager.info.getWorkspaceRoot());
|
|
133
133
|
const cscInfo = await this.cscInfo.value;
|
|
134
134
|
if (cscInfo) {
|
|
135
135
|
let logInfo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowsSignToolManager.js","sourceRoot":"","sources":["../../src/codeSign/windowsSignToolManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, InvalidConfigurationError, log, retry } from \"builder-util\"\nimport { MemoLazy, parseDn } from \"builder-util-runtime\"\nimport { rename } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../core\"\nimport { WindowsConfiguration } from \"../options/winOptions\"\nimport AppXTarget from \"../targets/AppxTarget\"\nimport { getSignToolPath } from \"../toolsets/windows\"\nimport { executeAppBuilderAsJson } from \"../util/appBuilder\"\nimport { resolveFunction } from \"../util/resolve\"\nimport { VmManager } from \"../vm/vm\"\nimport { WinPackager } from \"../winPackager\"\nimport { importCertificate } from \"./codesign\"\nimport { SignManager } from \"./signManager\"\nimport { WindowsSignOptions } from \"./windowsCodeSign\"\n\nexport type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>\n\nexport interface WindowsSignToolOptions extends WindowsSignOptions {\n readonly name: string\n readonly site: string | null\n}\n\nexport interface FileCodeSigningInfo {\n readonly file: string\n readonly password: string | null\n}\n\nexport interface WindowsSignTaskConfiguration extends WindowsSignToolOptions {\n readonly cscInfo: FileCodeSigningInfo | CertificateFromStoreInfo | null\n\n // set if output path differs from input (e.g. osslsigncode cannot sign file in-place)\n resultOutputPath?: string\n\n hash: string\n isNest: boolean\n}\n\nexport interface CustomWindowsSignTaskConfiguration extends WindowsSignTaskConfiguration {\n computeSignToolArgs(isWin: boolean): Array<string>\n}\n\nexport interface CertificateInfo {\n readonly commonName: string\n readonly bloodyMicrosoftSubjectDn: string\n}\n\nexport interface CertificateFromStoreInfo {\n thumbprint: string\n subject: string\n store: string\n isLocalMachineStore: boolean\n}\n\ninterface CertInfo {\n Subject: string\n Thumbprint: string\n PSParentPath: string\n}\n\nexport class WindowsSignToolManager implements SignManager {\n private readonly platformSpecificBuildOptions: WindowsConfiguration\n\n constructor(private readonly packager: WinPackager) {\n this.platformSpecificBuildOptions = packager.platformSpecificBuildOptions\n }\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(async () => {\n const publisherName = this.platformSpecificBuildOptions.signtoolOptions?.publisherName\n if (publisherName === null) {\n return null\n } else if (publisherName != null) {\n return asArray(publisherName)\n }\n\n const certInfo = await this.lazyCertInfo.value\n return certInfo == null ? null : [certInfo.commonName]\n })\n\n readonly lazyCertInfo = new MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>(\n () => this.cscInfo,\n async csc => {\n const cscInfo = await csc.value\n if (cscInfo == null) {\n return null\n }\n\n if (\"subject\" in cscInfo) {\n const bloodyMicrosoftSubjectDn = cscInfo.subject\n return {\n commonName: parseDn(bloodyMicrosoftSubjectDn).get(\"CN\")!,\n bloodyMicrosoftSubjectDn,\n }\n }\n\n const cscFile = cscInfo.file\n if (cscFile == null) {\n return null\n }\n return await this.getCertInfo(cscFile, cscInfo.password || \"\")\n }\n )\n\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.platformSpecificBuildOptions,\n platformSpecificBuildOptions => {\n const subjectName = platformSpecificBuildOptions.signtoolOptions?.certificateSubjectName\n const shaType = platformSpecificBuildOptions.signtoolOptions?.certificateSha1\n if (subjectName != null || shaType != null) {\n return this.packager.vm.value\n .then(vm => this.getCertificateFromStoreInfo(platformSpecificBuildOptions, vm))\n .catch((e: any) => {\n // https://github.com/electron-userland/electron-builder/pull/2397\n if (platformSpecificBuildOptions.signtoolOptions?.sign == null) {\n throw e\n } else {\n log.debug({ error: e }, \"getCertificateFromStoreInfo error\")\n return null\n }\n })\n }\n\n const certificateFile = platformSpecificBuildOptions.signtoolOptions?.certificateFile\n if (certificateFile != null) {\n const certificatePassword = this.packager.getCscPassword()\n return Promise.resolve({\n file: certificateFile,\n password: certificatePassword == null ? null : certificatePassword.trim(),\n })\n }\n\n const cscLink = this.packager.getCscLink(\"WIN_CSC_LINK\")\n if (cscLink == null || cscLink === \"\") {\n return Promise.resolve(null)\n }\n\n return (\n importCertificate(cscLink, this.packager.info.tempDirManager, this.packager.projectDir)\n // before then\n .catch((e: any) => {\n if (e instanceof InvalidConfigurationError) {\n throw new InvalidConfigurationError(`Env WIN_CSC_LINK is not correct, cannot resolve: ${e.message}`)\n } else {\n throw e\n }\n })\n .then(path => {\n return {\n file: path,\n password: this.packager.getCscPassword(),\n }\n })\n )\n }\n )\n\n initialize(): Promise<void> {\n return Promise.resolve()\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711\n async computePublisherName(target: Target, publisherName: string) {\n if (target instanceof AppXTarget && (await this.cscInfo.value) == null) {\n log.info({ reason: \"Windows Store only build\" }, \"AppX is not signed\")\n return publisherName || \"CN=ms\"\n }\n\n const certInfo = await this.lazyCertInfo.value\n const publisher = publisherName || (certInfo == null ? null : certInfo.bloodyMicrosoftSubjectDn)\n if (publisher == null) {\n throw new Error(\"Internal error: cannot compute subject using certificate info\")\n }\n return publisher\n }\n\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n let hashes = options.options.signtoolOptions?.signingHashAlgorithms\n // msi does not support dual-signing\n if (options.path.endsWith(\".msi\")) {\n hashes = [hashes != null && !hashes.includes(\"sha1\") ? \"sha256\" : \"sha1\"]\n } else if (options.path.endsWith(\".appx\")) {\n hashes = [\"sha256\"]\n } else if (hashes == null) {\n hashes = [\"sha1\", \"sha256\"]\n } else {\n hashes = Array.isArray(hashes) ? hashes : [hashes]\n }\n\n const name = this.packager.appInfo.productName\n const site = await this.packager.appInfo.computePackageUrl()\n\n const customSign = await resolveFunction(this.packager.appInfo.type, options.options.signtoolOptions?.sign, \"sign\")\n\n const cscInfo = await this.cscInfo.value\n if (cscInfo) {\n let logInfo: any = {\n file: log.filePath(options.path),\n }\n if (\"file\" in cscInfo) {\n logInfo = {\n ...logInfo,\n certificateFile: cscInfo.file,\n }\n } else {\n logInfo = {\n ...logInfo,\n subject: cscInfo.subject,\n thumbprint: cscInfo.thumbprint,\n store: cscInfo.store,\n user: cscInfo.isLocalMachineStore ? \"local machine\" : \"current user\",\n }\n }\n log.info(logInfo, \"signing\")\n } else if (!customSign) {\n log.debug({ signHook: !!customSign, cscInfo }, \"no signing info identified, signing is skipped\")\n return false\n }\n\n const executor = customSign || ((config: CustomWindowsSignTaskConfiguration, packager: WinPackager) => this.doSign(config, packager))\n let isNest = false\n for (const hash of hashes) {\n const taskConfiguration: WindowsSignTaskConfiguration = { ...options, name, site, cscInfo, hash, isNest }\n await Promise.resolve(\n executor(\n {\n ...taskConfiguration,\n computeSignToolArgs: isWin => this.computeSignToolArgs(taskConfiguration, isWin),\n },\n this.packager\n )\n )\n isNest = true\n if (taskConfiguration.resultOutputPath != null) {\n await rename(taskConfiguration.resultOutputPath, options.path)\n }\n }\n\n return true\n }\n\n async getCertInfo(file: string, password: string): Promise<CertificateInfo> {\n let result: any = null\n const errorMessagePrefix = \"Cannot extract publisher name from code signing certificate. As workaround, set win.publisherName. Error: \"\n try {\n result = await executeAppBuilderAsJson<any>([\"certificate-info\", \"--input\", file, \"--password\", password])\n } catch (e: any) {\n throw new Error(`${errorMessagePrefix}${e.stack || e}`)\n }\n\n if (result.error != null) {\n // noinspection ExceptionCaughtLocallyJS\n throw new InvalidConfigurationError(`${errorMessagePrefix}${result.error}`)\n }\n return result\n }\n\n // on windows be aware of http://stackoverflow.com/a/32640183/1910191\n computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm: VmManager = new VmManager()): Array<string> {\n return isWin ? this.computeWindowsSignArgs(options, vm) : this.computeOsslsigncodeArgs(options, vm)\n }\n\n private computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const inputFile = vm.toVmFile(options.path)\n const args = [\"sign\"]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const isRfc3161 = options.isNest || options.hash === \"sha256\"\n args.push(isRfc3161 ? \"/tr\" : \"/t\")\n\n const timestampUrl = isRfc3161\n ? options.options.signtoolOptions?.rfc3161TimeStampServer || \"http://timestamp.digicert.com\"\n : options.options.signtoolOptions?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, true)\n\n // Hash algorithm\n const isLegacyToolset = this.packager.config.toolsets?.winCodeSign === \"0.0.0\" || this.packager.config.toolsets?.winCodeSign == null\n if (isLegacyToolset) {\n // Legacy || v0.0.0: Only add /fd for non-SHA1 (original behavior)\n if (options.hash !== \"sha1\") {\n args.push(\"/fd\", options.hash)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n args.push(\"/td\", \"sha256\")\n }\n }\n } else {\n // Modern: Always add /fd (required by new Windows Kits)\n args.push(\"/fd\", options.hash.toLowerCase())\n // Only add /td for RFC3161 timestamps (incompatible with /t)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\" && (options.isNest || options.hash === \"sha256\")) {\n args.push(\"/td\", \"sha256\")\n }\n }\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, true)\n\n // Windows-specific\n args.push(\"/debug\")\n args.push(inputFile) // Must be last\n\n return args\n }\n\n private computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const inputFile = vm.toVmFile(options.path)\n const outputPath = this.getOutputPath(inputFile, options.hash)\n options.resultOutputPath = outputPath\n\n const args = [\"sign\", \"-in\", inputFile, \"-out\", outputPath]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const timestampUrl = options.options.signtoolOptions?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(\"-t\", timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, false)\n\n // Hash algorithm\n args.push(\"-h\", options.hash.toLowerCase())\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, false)\n\n // Proxy support\n const httpsProxy = process.env.HTTPS_PROXY\n if (httpsProxy?.length) {\n args.push(\"-p\", httpsProxy)\n }\n\n return args\n }\n\n private addCertificateArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n const certificateFile = (options.cscInfo as FileCodeSigningInfo).file\n\n if (certificateFile == null) {\n // Certificate from store (Windows only)\n if (!isWin) {\n throw new Error(\"certificateSha1/certificateSubjectName supported only on Windows\")\n }\n\n const cscInfo = options.cscInfo as CertificateFromStoreInfo\n args.push(\"/sha1\", cscInfo.thumbprint)\n args.push(\"/s\", cscInfo.store)\n if (cscInfo.isLocalMachineStore) {\n args.push(\"/sm\")\n }\n } else {\n // Certificate file\n const certExtension = path.extname(certificateFile)\n if (certExtension === \".p12\" || certExtension === \".pfx\") {\n args.push(isWin ? \"/f\" : \"-pkcs12\", vm.toVmFile(certificateFile))\n } else {\n throw new Error(`Please specify pkcs12 (.p12/.pfx) file, ${certificateFile} is not correct`)\n }\n }\n }\n\n private addCommonSigningArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n if (options.name) {\n args.push(isWin ? \"/d\" : \"-n\", options.name)\n }\n\n if (options.site) {\n args.push(isWin ? \"/du\" : \"-i\", options.site)\n }\n\n if (options.isNest) {\n args.push(isWin ? \"/as\" : \"-nest\")\n }\n\n const password = (options.cscInfo as FileCodeSigningInfo)?.password\n if (password) {\n args.push(isWin ? \"/p\" : \"-pass\", password)\n }\n\n const additionalCert = options.options.signtoolOptions?.additionalCertificateFile\n if (additionalCert) {\n args.push(isWin ? \"/ac\" : \"-ac\", vm.toVmFile(additionalCert))\n }\n }\n\n getOutputPath(inputPath: string, hash: string) {\n const extension = path.extname(inputPath)\n return path.join(path.dirname(inputPath), `${path.basename(inputPath, extension)}-signed-${hash}${extension}`)\n }\n\n async getCertificateFromStoreInfo(options: WindowsConfiguration, vm: VmManager): Promise<CertificateFromStoreInfo> {\n const certificateSubjectName = options.signtoolOptions?.certificateSubjectName\n const certificateSha1 = options.signtoolOptions?.certificateSha1?.toUpperCase()\n\n const ps = await vm.powershellCommand.value\n const rawResult = await vm.exec(ps, [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-ChildItem -Recurse Cert: -CodeSigningCert | Select-Object -Property Subject,PSParentPath,Thumbprint | ConvertTo-Json -Compress\",\n ])\n const certList = rawResult.length === 0 ? [] : asArray<CertInfo>(JSON.parse(rawResult))\n for (const certInfo of certList) {\n if (\n (certificateSubjectName != null && !certInfo.Subject.includes(certificateSubjectName)) ||\n (certificateSha1 != null && certInfo.Thumbprint.toUpperCase() !== certificateSha1)\n ) {\n continue\n }\n\n const parentPath = certInfo.PSParentPath\n const store = parentPath.substring(parentPath.lastIndexOf(\"\\\\\") + 1)\n log.debug({ store, PSParentPath: parentPath }, \"auto-detect certificate store\")\n // https://github.com/electron-userland/electron-builder/issues/1717\n const isLocalMachineStore = parentPath.includes(\"Certificate::LocalMachine\")\n log.debug(null, \"auto-detect using of LocalMachine store\")\n return {\n thumbprint: certInfo.Thumbprint,\n subject: certInfo.Subject,\n store,\n isLocalMachineStore,\n }\n }\n\n throw new Error(`Cannot find certificate ${certificateSubjectName || certificateSha1}, all certs: ${rawResult}`)\n }\n\n async doSign(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager) {\n // https://github.com/electron-userland/electron-builder/pull/1944\n const timeout = parseInt(process.env.SIGNTOOL_TIMEOUT as any, 10) || 10 * 60 * 1000\n // decide runtime argument by cases\n let args: Array<string>\n let vm: VmManager\n const useVmIfNotOnWin = configuration.path.endsWith(\".appx\") || !(\"file\" in configuration.cscInfo!) /* certificateSubjectName and other such options */\n const isWin = process.platform === \"win32\" || useVmIfNotOnWin\n const toolInfo = await getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin)\n const tool = toolInfo.path\n if (useVmIfNotOnWin) {\n vm = await packager.vm.value\n args = this.computeSignToolArgs(configuration, isWin, vm)\n } else {\n vm = new VmManager()\n args = configuration.computeSignToolArgs(isWin)\n }\n\n await retry(() => vm.exec(tool, args, { timeout, env: { ...process.env, ...(toolInfo.env || {}) } }), {\n retries: 2,\n interval: 15000,\n backoff: 10000,\n shouldRetry: (e: any) => {\n if (\n e.message.includes(\"The file is being used by another process\") ||\n e.message.includes(\"The specified timestamp server either could not be reached\") ||\n e.message.includes(\"No certificates were found that met all the given criteria.\")\n ) {\n log.warn(`Attempt to code sign failed, another attempt will be made in 15 seconds: ${e.message}`)\n return true\n }\n return false\n },\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"windowsSignToolManager.js","sourceRoot":"","sources":["../../src/codeSign/windowsSignToolManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { asArray, InvalidConfigurationError, log, retry } from \"builder-util\"\nimport { MemoLazy, parseDn } from \"builder-util-runtime\"\nimport { rename } from \"fs-extra\"\nimport { Lazy } from \"lazy-val\"\nimport * as path from \"path\"\nimport { Target } from \"../core\"\nimport { WindowsConfiguration } from \"../options/winOptions\"\nimport AppXTarget from \"../targets/AppxTarget\"\nimport { getSignToolPath } from \"../toolsets/windows\"\nimport { executeAppBuilderAsJson } from \"../util/appBuilder\"\nimport { resolveFunction } from \"../util/resolve\"\nimport { VmManager } from \"../vm/vm\"\nimport { WinPackager } from \"../winPackager\"\nimport { importCertificate } from \"./codesign\"\nimport { SignManager } from \"./signManager\"\nimport { WindowsSignOptions } from \"./windowsCodeSign\"\n\nexport type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration, packager?: WinPackager) => Promise<any>\n\nexport interface WindowsSignToolOptions extends WindowsSignOptions {\n readonly name: string\n readonly site: string | null\n}\n\nexport interface FileCodeSigningInfo {\n readonly file: string\n readonly password: string | null\n}\n\nexport interface WindowsSignTaskConfiguration extends WindowsSignToolOptions {\n readonly cscInfo: FileCodeSigningInfo | CertificateFromStoreInfo | null\n\n // set if output path differs from input (e.g. osslsigncode cannot sign file in-place)\n resultOutputPath?: string\n\n hash: string\n isNest: boolean\n}\n\nexport interface CustomWindowsSignTaskConfiguration extends WindowsSignTaskConfiguration {\n computeSignToolArgs(isWin: boolean): Array<string>\n}\n\nexport interface CertificateInfo {\n readonly commonName: string\n readonly bloodyMicrosoftSubjectDn: string\n}\n\nexport interface CertificateFromStoreInfo {\n thumbprint: string\n subject: string\n store: string\n isLocalMachineStore: boolean\n}\n\ninterface CertInfo {\n Subject: string\n Thumbprint: string\n PSParentPath: string\n}\n\nexport class WindowsSignToolManager implements SignManager {\n private readonly platformSpecificBuildOptions: WindowsConfiguration\n\n constructor(private readonly packager: WinPackager) {\n this.platformSpecificBuildOptions = packager.platformSpecificBuildOptions\n }\n\n readonly computedPublisherName = new Lazy<Array<string> | null>(async () => {\n const publisherName = this.platformSpecificBuildOptions.signtoolOptions?.publisherName\n if (publisherName === null) {\n return null\n } else if (publisherName != null) {\n return asArray(publisherName)\n }\n\n const certInfo = await this.lazyCertInfo.value\n return certInfo == null ? null : [certInfo.commonName]\n })\n\n readonly lazyCertInfo = new MemoLazy<MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>, CertificateInfo | null>(\n () => this.cscInfo,\n async csc => {\n const cscInfo = await csc.value\n if (cscInfo == null) {\n return null\n }\n\n if (\"subject\" in cscInfo) {\n const bloodyMicrosoftSubjectDn = cscInfo.subject\n return {\n commonName: parseDn(bloodyMicrosoftSubjectDn).get(\"CN\")!,\n bloodyMicrosoftSubjectDn,\n }\n }\n\n const cscFile = cscInfo.file\n if (cscFile == null) {\n return null\n }\n return await this.getCertInfo(cscFile, cscInfo.password || \"\")\n }\n )\n\n readonly cscInfo = new MemoLazy<WindowsConfiguration, FileCodeSigningInfo | CertificateFromStoreInfo | null>(\n () => this.platformSpecificBuildOptions,\n platformSpecificBuildOptions => {\n const subjectName = platformSpecificBuildOptions.signtoolOptions?.certificateSubjectName\n const shaType = platformSpecificBuildOptions.signtoolOptions?.certificateSha1\n if (subjectName != null || shaType != null) {\n return this.packager.vm.value\n .then(vm => this.getCertificateFromStoreInfo(platformSpecificBuildOptions, vm))\n .catch((e: any) => {\n // https://github.com/electron-userland/electron-builder/pull/2397\n if (platformSpecificBuildOptions.signtoolOptions?.sign == null) {\n throw e\n } else {\n log.debug({ error: e }, \"getCertificateFromStoreInfo error\")\n return null\n }\n })\n }\n\n const certificateFile = platformSpecificBuildOptions.signtoolOptions?.certificateFile\n if (certificateFile != null) {\n const certificatePassword = this.packager.getCscPassword()\n return Promise.resolve({\n file: certificateFile,\n password: certificatePassword == null ? null : certificatePassword.trim(),\n })\n }\n\n const cscLink = this.packager.getCscLink(\"WIN_CSC_LINK\")\n if (cscLink == null || cscLink === \"\") {\n return Promise.resolve(null)\n }\n\n return (\n importCertificate(cscLink, this.packager.info.tempDirManager, this.packager.projectDir)\n // before then\n .catch((e: any) => {\n if (e instanceof InvalidConfigurationError) {\n throw new InvalidConfigurationError(`Env WIN_CSC_LINK is not correct, cannot resolve: ${e.message}`)\n } else {\n throw e\n }\n })\n .then(path => {\n return {\n file: path,\n password: this.packager.getCscPassword(),\n }\n })\n )\n }\n )\n\n initialize(): Promise<void> {\n return Promise.resolve()\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2108#issuecomment-333200711\n async computePublisherName(target: Target, publisherName: string) {\n if (target instanceof AppXTarget && (await this.cscInfo.value) == null) {\n log.info({ reason: \"Windows Store only build\" }, \"AppX is not signed\")\n return publisherName || \"CN=ms\"\n }\n\n const certInfo = await this.lazyCertInfo.value\n const publisher = publisherName || (certInfo == null ? null : certInfo.bloodyMicrosoftSubjectDn)\n if (publisher == null) {\n throw new Error(\"Internal error: cannot compute subject using certificate info\")\n }\n return publisher\n }\n\n async signFile(options: WindowsSignOptions): Promise<boolean> {\n let hashes = options.options.signtoolOptions?.signingHashAlgorithms\n // msi does not support dual-signing\n if (options.path.endsWith(\".msi\")) {\n hashes = [hashes != null && !hashes.includes(\"sha1\") ? \"sha256\" : \"sha1\"]\n } else if (options.path.endsWith(\".appx\")) {\n hashes = [\"sha256\"]\n } else if (hashes == null) {\n hashes = [\"sha1\", \"sha256\"]\n } else {\n hashes = Array.isArray(hashes) ? hashes : [hashes]\n }\n\n const name = this.packager.appInfo.productName\n const site = await this.packager.appInfo.computePackageUrl()\n\n const customSign = await resolveFunction(this.packager.appInfo.type, options.options.signtoolOptions?.sign, \"sign\", await this.packager.info.getWorkspaceRoot())\n\n const cscInfo = await this.cscInfo.value\n if (cscInfo) {\n let logInfo: any = {\n file: log.filePath(options.path),\n }\n if (\"file\" in cscInfo) {\n logInfo = {\n ...logInfo,\n certificateFile: cscInfo.file,\n }\n } else {\n logInfo = {\n ...logInfo,\n subject: cscInfo.subject,\n thumbprint: cscInfo.thumbprint,\n store: cscInfo.store,\n user: cscInfo.isLocalMachineStore ? \"local machine\" : \"current user\",\n }\n }\n log.info(logInfo, \"signing\")\n } else if (!customSign) {\n log.debug({ signHook: !!customSign, cscInfo }, \"no signing info identified, signing is skipped\")\n return false\n }\n\n const executor = customSign || ((config: CustomWindowsSignTaskConfiguration, packager: WinPackager) => this.doSign(config, packager))\n let isNest = false\n for (const hash of hashes) {\n const taskConfiguration: WindowsSignTaskConfiguration = { ...options, name, site, cscInfo, hash, isNest }\n await Promise.resolve(\n executor(\n {\n ...taskConfiguration,\n computeSignToolArgs: isWin => this.computeSignToolArgs(taskConfiguration, isWin),\n },\n this.packager\n )\n )\n isNest = true\n if (taskConfiguration.resultOutputPath != null) {\n await rename(taskConfiguration.resultOutputPath, options.path)\n }\n }\n\n return true\n }\n\n async getCertInfo(file: string, password: string): Promise<CertificateInfo> {\n let result: any = null\n const errorMessagePrefix = \"Cannot extract publisher name from code signing certificate. As workaround, set win.publisherName. Error: \"\n try {\n result = await executeAppBuilderAsJson<any>([\"certificate-info\", \"--input\", file, \"--password\", password])\n } catch (e: any) {\n throw new Error(`${errorMessagePrefix}${e.stack || e}`)\n }\n\n if (result.error != null) {\n // noinspection ExceptionCaughtLocallyJS\n throw new InvalidConfigurationError(`${errorMessagePrefix}${result.error}`)\n }\n return result\n }\n\n // on windows be aware of http://stackoverflow.com/a/32640183/1910191\n computeSignToolArgs(options: WindowsSignTaskConfiguration, isWin: boolean, vm: VmManager = new VmManager()): Array<string> {\n return isWin ? this.computeWindowsSignArgs(options, vm) : this.computeOsslsigncodeArgs(options, vm)\n }\n\n private computeWindowsSignArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const inputFile = vm.toVmFile(options.path)\n const args = [\"sign\"]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const isRfc3161 = options.isNest || options.hash === \"sha256\"\n args.push(isRfc3161 ? \"/tr\" : \"/t\")\n\n const timestampUrl = isRfc3161\n ? options.options.signtoolOptions?.rfc3161TimeStampServer || \"http://timestamp.digicert.com\"\n : options.options.signtoolOptions?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, true)\n\n // Hash algorithm\n const isLegacyToolset = this.packager.config.toolsets?.winCodeSign === \"0.0.0\" || this.packager.config.toolsets?.winCodeSign == null\n if (isLegacyToolset) {\n // Legacy || v0.0.0: Only add /fd for non-SHA1 (original behavior)\n if (options.hash !== \"sha1\") {\n args.push(\"/fd\", options.hash)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n args.push(\"/td\", \"sha256\")\n }\n }\n } else {\n // Modern: Always add /fd (required by new Windows Kits)\n args.push(\"/fd\", options.hash.toLowerCase())\n // Only add /td for RFC3161 timestamps (incompatible with /t)\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\" && (options.isNest || options.hash === \"sha256\")) {\n args.push(\"/td\", \"sha256\")\n }\n }\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, true)\n\n // Windows-specific\n args.push(\"/debug\")\n args.push(inputFile) // Must be last\n\n return args\n }\n\n private computeOsslsigncodeArgs(options: WindowsSignTaskConfiguration, vm: VmManager): Array<string> {\n const inputFile = vm.toVmFile(options.path)\n const outputPath = this.getOutputPath(inputFile, options.hash)\n options.resultOutputPath = outputPath\n\n const args = [\"sign\", \"-in\", inputFile, \"-out\", outputPath]\n\n // Timestamping\n if (process.env.ELECTRON_BUILDER_OFFLINE !== \"true\") {\n const timestampUrl = options.options.signtoolOptions?.timeStampServer || \"http://timestamp.digicert.com\"\n args.push(\"-t\", timestampUrl)\n }\n\n // Certificate\n this.addCertificateArgs(args, options, vm, false)\n\n // Hash algorithm\n args.push(\"-h\", options.hash.toLowerCase())\n\n // Optional parameters\n this.addCommonSigningArgs(args, options, vm, false)\n\n // Proxy support\n const httpsProxy = process.env.HTTPS_PROXY\n if (httpsProxy?.length) {\n args.push(\"-p\", httpsProxy)\n }\n\n return args\n }\n\n private addCertificateArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n const certificateFile = (options.cscInfo as FileCodeSigningInfo).file\n\n if (certificateFile == null) {\n // Certificate from store (Windows only)\n if (!isWin) {\n throw new Error(\"certificateSha1/certificateSubjectName supported only on Windows\")\n }\n\n const cscInfo = options.cscInfo as CertificateFromStoreInfo\n args.push(\"/sha1\", cscInfo.thumbprint)\n args.push(\"/s\", cscInfo.store)\n if (cscInfo.isLocalMachineStore) {\n args.push(\"/sm\")\n }\n } else {\n // Certificate file\n const certExtension = path.extname(certificateFile)\n if (certExtension === \".p12\" || certExtension === \".pfx\") {\n args.push(isWin ? \"/f\" : \"-pkcs12\", vm.toVmFile(certificateFile))\n } else {\n throw new Error(`Please specify pkcs12 (.p12/.pfx) file, ${certificateFile} is not correct`)\n }\n }\n }\n\n private addCommonSigningArgs(args: Array<string>, options: WindowsSignTaskConfiguration, vm: VmManager, isWin: boolean): void {\n if (options.name) {\n args.push(isWin ? \"/d\" : \"-n\", options.name)\n }\n\n if (options.site) {\n args.push(isWin ? \"/du\" : \"-i\", options.site)\n }\n\n if (options.isNest) {\n args.push(isWin ? \"/as\" : \"-nest\")\n }\n\n const password = (options.cscInfo as FileCodeSigningInfo)?.password\n if (password) {\n args.push(isWin ? \"/p\" : \"-pass\", password)\n }\n\n const additionalCert = options.options.signtoolOptions?.additionalCertificateFile\n if (additionalCert) {\n args.push(isWin ? \"/ac\" : \"-ac\", vm.toVmFile(additionalCert))\n }\n }\n\n getOutputPath(inputPath: string, hash: string) {\n const extension = path.extname(inputPath)\n return path.join(path.dirname(inputPath), `${path.basename(inputPath, extension)}-signed-${hash}${extension}`)\n }\n\n async getCertificateFromStoreInfo(options: WindowsConfiguration, vm: VmManager): Promise<CertificateFromStoreInfo> {\n const certificateSubjectName = options.signtoolOptions?.certificateSubjectName\n const certificateSha1 = options.signtoolOptions?.certificateSha1?.toUpperCase()\n\n const ps = await vm.powershellCommand.value\n const rawResult = await vm.exec(ps, [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n \"Get-ChildItem -Recurse Cert: -CodeSigningCert | Select-Object -Property Subject,PSParentPath,Thumbprint | ConvertTo-Json -Compress\",\n ])\n const certList = rawResult.length === 0 ? [] : asArray<CertInfo>(JSON.parse(rawResult))\n for (const certInfo of certList) {\n if (\n (certificateSubjectName != null && !certInfo.Subject.includes(certificateSubjectName)) ||\n (certificateSha1 != null && certInfo.Thumbprint.toUpperCase() !== certificateSha1)\n ) {\n continue\n }\n\n const parentPath = certInfo.PSParentPath\n const store = parentPath.substring(parentPath.lastIndexOf(\"\\\\\") + 1)\n log.debug({ store, PSParentPath: parentPath }, \"auto-detect certificate store\")\n // https://github.com/electron-userland/electron-builder/issues/1717\n const isLocalMachineStore = parentPath.includes(\"Certificate::LocalMachine\")\n log.debug(null, \"auto-detect using of LocalMachine store\")\n return {\n thumbprint: certInfo.Thumbprint,\n subject: certInfo.Subject,\n store,\n isLocalMachineStore,\n }\n }\n\n throw new Error(`Cannot find certificate ${certificateSubjectName || certificateSha1}, all certs: ${rawResult}`)\n }\n\n async doSign(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager) {\n // https://github.com/electron-userland/electron-builder/pull/1944\n const timeout = parseInt(process.env.SIGNTOOL_TIMEOUT as any, 10) || 10 * 60 * 1000\n // decide runtime argument by cases\n let args: Array<string>\n let vm: VmManager\n const useVmIfNotOnWin = configuration.path.endsWith(\".appx\") || !(\"file\" in configuration.cscInfo!) /* certificateSubjectName and other such options */\n const isWin = process.platform === \"win32\" || useVmIfNotOnWin\n const toolInfo = await getSignToolPath(this.packager.config.toolsets?.winCodeSign, isWin)\n const tool = toolInfo.path\n if (useVmIfNotOnWin) {\n vm = await packager.vm.value\n args = this.computeSignToolArgs(configuration, isWin, vm)\n } else {\n vm = new VmManager()\n args = configuration.computeSignToolArgs(isWin)\n }\n\n await retry(() => vm.exec(tool, args, { timeout, env: { ...process.env, ...(toolInfo.env || {}) } }), {\n retries: 2,\n interval: 15000,\n backoff: 10000,\n shouldRetry: (e: any) => {\n if (\n e.message.includes(\"The file is being used by another process\") ||\n e.message.includes(\"The specified timestamp server either could not be reached\") ||\n e.message.includes(\"No certificates were found that met all the given criteria.\")\n ) {\n log.warn(`Attempt to code sign failed, another attempt will be made in 15 seconds: ${e.message}`)\n return true\n }\n return false\n },\n })\n }\n}\n"]}
|