signing-enclave
Version:
A code signing and notarization tool for macOS and Windows applications. Uses Azure Key Vault for secret and certificate management.
133 lines • 4.75 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.requestSecret = requestSecret;
exports.requestNotarizationCredentials = requestNotarizationCredentials;
exports.requestCert = requestCert;
exports.requestFileAction = requestFileAction;
exports.requestNotarize = requestNotarize;
exports.requestSign = requestSign;
exports.requestSignAndNotarize = requestSignAndNotarize;
const crypto_1 = require("crypto");
const utils_1 = require("./utils");
const promises_1 = require("fs/promises");
const path_1 = __importDefault(require("path"));
const utils_2 = require("../utils");
async function requestSecret(options) {
const id = (0, crypto_1.randomUUID)().slice(-6);
const request = {
id,
actions: ["getSecret"],
secretName: options.secretName,
path: `${id}.txt`,
};
await (0, utils_1.createRequestFile)(request, id);
const receipt = await (0, utils_1.waitForReceipt)(id);
if (receipt.status === "Completed" && receipt.error == null) {
const filePath = path_1.default.join(utils_1.WATCH_FOLDER, receipt.originalFile);
const secret = await (0, promises_1.readFile)(filePath, "utf-8");
(0, promises_1.unlink)(filePath);
return { secret };
}
else {
throw new Error(receipt.error || `Request ${id} failed.`);
}
}
async function requestNotarizationCredentials() {
const id = (0, crypto_1.randomUUID)().slice(-6);
const request = {
id,
actions: ["getNotarizationCredentials"],
path: `${id}.json`,
};
await (0, utils_1.createRequestFile)(request, id);
const receipt = await (0, utils_1.waitForReceipt)(id);
if (receipt.status === "Completed" && receipt.error == null) {
const filePath = path_1.default.join(utils_1.WATCH_FOLDER, receipt.originalFile);
const secret = await (0, utils_2.readJson)(filePath);
(0, promises_1.unlink)(filePath);
return secret;
}
else {
throw new Error(receipt.error || `Request ${id} failed.`);
}
}
async function requestCert(options) {
const id = (0, crypto_1.randomUUID)().slice(-6);
const request = {
id,
actions: ["getCert"],
platform: options.platform,
type: options.type,
provisioningProfile: options.provisioningProfile,
path: `${id}.p12`,
};
await (0, utils_1.createRequestFile)(request, id);
const receipt = await (0, utils_1.waitForReceipt)(id);
if (receipt.status === "Completed" && receipt.error == null) {
if ("originalFile" in receipt) {
const secretFilePath = path_1.default.join(utils_1.WATCH_FOLDER, receipt.originalFile);
return {
secretFilePath,
cleanup: () => {
return (0, promises_1.unlink)(secretFilePath);
},
};
}
else {
throw new Error(`Receipt for request ${id} does not contain a certPath.`);
}
}
else {
throw new Error(receipt.error || `Request ${id} failed.`);
}
}
async function requestFileAction(options) {
const id = (0, crypto_1.randomUUID)().slice(-6);
const originalFileName = path_1.default.basename(options.path);
const destFileName = `${id}_${originalFileName}`;
await (0, utils_1.moveFileOrFolderToWatchFolder)(options.path, destFileName);
const request = {
id,
actions: options.actions,
platform: options.platform,
type: options.type,
provisioningProfile: options.provisioningProfile,
path: destFileName,
};
await (0, utils_1.createRequestFile)(request, id);
const receipt = await (0, utils_1.waitForReceipt)(id);
if (receipt.status === "Completed" && receipt.error == null) {
if ("originalFile" in receipt) {
return { path: path_1.default.join(utils_1.WATCH_FOLDER, receipt.originalFile) };
}
else {
throw new Error(`Receipt for request ${id} does not contain a file path.`);
}
}
else {
throw new Error(receipt.error || `Request ${id} failed.`);
}
}
async function requestNotarize(options) {
return requestFileAction({
...options,
platform: "mac",
actions: ["notarize"],
});
}
async function requestSign(options) {
return requestFileAction({
...options,
actions: ["sign"],
});
}
async function requestSignAndNotarize(options) {
return requestFileAction({
...options,
actions: ["sign", "notarize"],
});
}
//# sourceMappingURL=index.js.map