"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sign = exports.make = exports.pri = exports.priConfig = exports.getCertPublisher = void 0;
const windows_sign_1 = require("@electron/windows-sign");
const child_process_1 = require("child_process");
const logger_1 = require("./logger");
const run = async (executable, args) => {
return new Promise((resolve, reject) => {
const proc = (0, child_process_1.spawn)(executable, args, {});
logger_1.log.debug(`Calling ${executable} with args`, args);
const cleanOutData = (data) => {
return data
.toString()
.replace(/\r/g, '')
.replace(/\\\\/g, '\\')
.split('\n');
};
let stdout = "";
proc.stdout.on('data', (data) => {
stdout += data;
});
let stderr = "";
proc.stderr.on('data', (data) => {
stderr += data;
});
proc.on('exit', (code) => {
logger_1.log.debug(`stdout of ${executable}`, cleanOutData(stdout));
if (code !== 0) {
logger_1.log.error(`stderr of ${executable}`, false, cleanOutData(stderr));
return reject(new Error(`Failed running ${executable} Exit Code: ${code} See previous errors for details`));
}
return resolve(stdout);
});
proc.stdin.end();
});
};
const getCertPublisher = async (cert, cert_pass) => {
const args = [];
args.push('-p', cert_pass);
args.push('-dump', cert);
const certDump = await run('certutil', args);
const subjectRegex = /Subject:\s*(.*)/;
const match = certDump.match(subjectRegex);
const publisher = match ? match[1].trim() : null;
if (!publisher) {
logger_1.log.error('Unable to find publisher in Cert');
}
return publisher;
};
exports.getCertPublisher = getCertPublisher;
const priConfig = async (program) => {
const { makePri, priConfig, createPri } = program;
if (createPri) {
const args = ['createconfig', '/cf', priConfig, '/dq', 'en-US'];
logger_1.log.debug('Creating pri config.');
await run(makePri, args);
}
else {
logger_1.log.debug('Skipping making pri config.');
}
};
exports.priConfig = priConfig;
const pri = async (program) => {
const { makePri, priConfig, layoutDir, priFile, appManifestLayout, createPri } = program;
if (createPri) {
logger_1.log.debug('Making pri.');
const args = ['new', '/pr', layoutDir, '/cf', priConfig, '/mn', appManifestLayout, '/of', priFile, '/v'];
await run(makePri, args);
}
else {
logger_1.log.debug('Skipping making pri.');
}
};
exports.pri = pri;
const make = async (program) => {
const { makeMsix, layoutDir, msix, isSparsePackage } = program;
const args = [
'pack',
'/d',
layoutDir,
'/p',
msix,
'/o',
];
if (isSparsePackage) {
args.push('/nv');
}
await run(makeMsix, args);
};
exports.make = make;
const sign = async (program) => {
if (program.sign) {
const signOptions = program.windowsSignOptions;
logger_1.log.debug('Signing with options', signOptions);
await (0, windows_sign_1.sign)(signOptions);
}
else {
logger_1.log.debug('Skipping signing.');
}
};
exports.sign = sign;
//# sourceMappingURL=bin.js.map