UNPKG

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
"use strict"; 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