main funcions fixes

This commit is contained in:
2025-09-29 22:06:11 +09:00
parent 40e016e128
commit c8c3274527
7995 changed files with 1517998 additions and 1057 deletions

View File

@@ -0,0 +1,2 @@
import { NotaryToolNotarizeAppOptions } from './types';
export declare function checkSignatures(opts: NotaryToolNotarizeAppOptions): Promise<void>;

View File

@@ -0,0 +1,80 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkSignatures = void 0;
const path = __importStar(require("path"));
const spawn_1 = require("./spawn");
const debug_1 = __importDefault(require("debug"));
const d = (0, debug_1.default)('electron-notarize');
const codesignDisplay = (opts) => __awaiter(void 0, void 0, void 0, function* () {
const result = yield (0, spawn_1.spawn)('codesign', ['-dv', '-vvvv', '--deep', path.basename(opts.appPath)], {
cwd: path.dirname(opts.appPath),
});
return result;
});
const codesign = (opts) => __awaiter(void 0, void 0, void 0, function* () {
d('attempting to check codesign of app:', opts.appPath);
const result = yield (0, spawn_1.spawn)('codesign', ['-vvv', '--deep', '--strict', path.basename(opts.appPath)], {
cwd: path.dirname(opts.appPath),
});
return result;
});
function checkSignatures(opts) {
return __awaiter(this, void 0, void 0, function* () {
const fileExt = path.extname(opts.appPath);
if (fileExt === '.dmg' || fileExt === '.pkg') {
d('skipping codesign check for dmg or pkg file');
return;
}
const [codesignResult, codesignInfo] = yield Promise.all([codesign(opts), codesignDisplay(opts)]);
let error = '';
if (codesignInfo.code !== 0) {
d('codesignInfo failed');
error = `Failed to display codesign info on your application with code: ${codesignInfo.code}\n\n${codesignInfo.output}\n`;
}
if (codesignResult.code !== 0) {
d('codesign check failed');
error += `Failed to codesign your application with code: ${codesignResult.code}\n\n${codesignResult.output}\n\n${codesignInfo.output}`;
}
if (error) {
throw new Error(error);
}
d('codesign assess succeeded');
});
}
exports.checkSignatures = checkSignatures;
//# sourceMappingURL=check-signature.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"check-signature.js","sourceRoot":"","sources":["../src/check-signature.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,mCAAgC;AAEhC,kDAA0B;AAC1B,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,mBAAmB,CAAC,CAAC;AAErC,MAAM,eAAe,GAAG,CAAO,IAAkC,EAAE,EAAE;IACnE,MAAM,MAAM,GAAG,MAAM,IAAA,aAAK,EAAC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;QAC9F,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KAChC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAO,IAAkC,EAAE,EAAE;IAC5D,CAAC,CAAC,sCAAsC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,IAAA,aAAK,EACxB,UAAU,EACV,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC3D;QACE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;KAChC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA,CAAC;AACF,SAAsB,eAAe,CAAC,IAAkC;;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE;YAC5C,CAAC,CAAC,6CAA6C,CAAC,CAAC;YACjD,OAAO;SACR;QACD,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE;YAC3B,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACzB,KAAK,GAAG,kEAAkE,YAAY,CAAC,IAAI,OAAO,YAAY,CAAC,MAAM,IAAI,CAAC;SAC3H;QACD,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;YAC7B,CAAC,CAAC,uBAAuB,CAAC,CAAC;YAC3B,KAAK,IAAI,kDAAkD,cAAc,CAAC,IAAI,OAAO,cAAc,CAAC,MAAM,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC;SACxI;QAED,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;SACxB;QACD,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACjC,CAAC;CAAA;AAtBD,0CAsBC"}

View File

@@ -0,0 +1,13 @@
export declare function withTempDir<T>(fn: (dir: string) => Promise<T>): Promise<T>;
export declare function makeSecret(s: string): string;
export declare function isSecret(s: string): boolean;
export interface NotarizationInfo {
uuid: string;
date: Date;
status: 'invalid' | 'in progress' | 'success';
logFileUrl: string | null;
statusCode?: 0 | 2;
statusMessage?: string;
}
export declare function parseNotarizationInfo(info: string): NotarizationInfo;
export declare function delay(ms: number): Promise<void>;

View File

@@ -0,0 +1,106 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.delay = exports.parseNotarizationInfo = exports.isSecret = exports.makeSecret = exports.withTempDir = void 0;
const debug_1 = __importDefault(require("debug"));
const fs = __importStar(require("fs-extra"));
const os = __importStar(require("os"));
const path = __importStar(require("path"));
const d = (0, debug_1.default)('electron-notarize:helpers');
function withTempDir(fn) {
return __awaiter(this, void 0, void 0, function* () {
const dir = yield fs.mkdtemp(path.resolve(os.tmpdir(), 'electron-notarize-'));
d('doing work inside temp dir:', dir);
let result;
try {
result = yield fn(dir);
}
catch (err) {
d('work failed');
yield fs.remove(dir);
throw err;
}
d('work succeeded');
yield fs.remove(dir);
return result;
});
}
exports.withTempDir = withTempDir;
class Secret {
constructor(value) {
this.value = value;
}
toString() {
return this.value;
}
inspect() {
return '******';
}
}
function makeSecret(s) {
return new Secret(s);
}
exports.makeSecret = makeSecret;
function isSecret(s) {
return s instanceof Secret;
}
exports.isSecret = isSecret;
function parseNotarizationInfo(info) {
const out = {};
const matchToProperty = (key, r, modifier) => {
const exec = r.exec(info);
if (exec) {
out[key] = modifier ? modifier(exec[1]) : exec[1];
}
};
matchToProperty('uuid', /\n *RequestUUID: (.+?)\n/);
matchToProperty('date', /\n *Date: (.+?)\n/, d => new Date(d));
matchToProperty('status', /\n *Status: (.+?)\n/);
matchToProperty('logFileUrl', /\n *LogFileURL: (.+?)\n/);
matchToProperty('statusCode', /\n *Status Code: (.+?)\n/, n => parseInt(n, 10));
matchToProperty('statusMessage', /\n *Status Message: (.+?)\n/);
if (out.logFileUrl === '(null)') {
out.logFileUrl = null;
}
return out;
}
exports.parseNotarizationInfo = parseNotarizationInfo;
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
exports.delay = delay;
//# sourceMappingURL=helpers.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,6CAA+B;AAC/B,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,2BAA2B,CAAC,CAAC;AAE7C,SAAsB,WAAW,CAAI,EAA+B;;QAClE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,MAAS,CAAC;QACd,IAAI;YACF,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;SACxB;QAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,aAAa,CAAC,CAAC;YACjB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM,GAAG,CAAC;SACX;QACD,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACpB,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAdD,kCAcC;AAED,MAAM,MAAM;IACV,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAErC,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO;QACL,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,SAAgB,UAAU,CAAC,CAAS;IAClC,OAAQ,IAAI,MAAM,CAAC,CAAC,CAAmB,CAAC;AAC1C,CAAC;AAFD,gCAEC;AAED,SAAgB,QAAQ,CAAC,CAAS;IAChC,OAAQ,CAAS,YAAY,MAAM,CAAC;AACtC,CAAC;AAFD,4BAEC;AAYD,SAAgB,qBAAqB,CAAC,IAAY;IAChD,MAAM,GAAG,GAAG,EAAS,CAAC;IACtB,MAAM,eAAe,GAAG,CACtB,GAAM,EACN,CAAS,EACT,QAA6C,EAC7C,EAAE;QACF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE;YACR,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnD;IACH,CAAC,CAAC;IACF,eAAe,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACpD,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,eAAe,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,eAAe,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IACzD,eAAe,CAAC,YAAY,EAAE,0BAA0B,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAQ,CAAC,CAAC;IACvF,eAAe,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAC;IAEhE,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;QAC/B,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;KACvB;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAxBD,sDAwBC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAFD,sBAEC"}

View File

@@ -0,0 +1,20 @@
import { NotarizeOptions, NotarizeOptionsLegacy, NotarizeOptionsNotaryTool } from './types';
export { NotarizeOptions };
export { validateNotaryToolAuthorizationArgs as validateAuthorizationArgs } from './validate-args';
/**
* Sends your app to Apple for notarization with `notarytool` and staples a successful
* notarization result to the app bundle. This includes your {@link NotaryToolNotarizeAppOptions.appPath | appPath}
* as well as one of three valid credential authentication strategies.
*
* See {@link NotaryToolCredentials} for authentication options.
*
* @category Core
* @param args Options for notarization
* @returns The Promise resolves once notarization is complete. Note that this may take a few minutes.
*/
declare function notarize(args: NotarizeOptionsNotaryTool): Promise<void>;
/**
* @deprecated
*/
declare function notarize(args: NotarizeOptionsLegacy): Promise<void>;
export { notarize };

View File

@@ -0,0 +1,53 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.notarize = exports.validateAuthorizationArgs = void 0;
const debug_1 = __importDefault(require("debug"));
const promise_retry_1 = __importDefault(require("promise-retry"));
const check_signature_1 = require("./check-signature");
const notarytool_1 = require("./notarytool");
const staple_1 = require("./staple");
const d = (0, debug_1.default)('electron-notarize');
var validate_args_1 = require("./validate-args");
Object.defineProperty(exports, "validateAuthorizationArgs", { enumerable: true, get: function () { return validate_args_1.validateNotaryToolAuthorizationArgs; } });
function notarize(_a) {
var { appPath } = _a, otherOptions = __rest(_a, ["appPath"]);
return __awaiter(this, void 0, void 0, function* () {
if (otherOptions.tool === 'legacy') {
throw new Error('Notarization with the legacy altool system was decommisioned as of November 2023');
}
yield (0, check_signature_1.checkSignatures)({ appPath });
d('notarizing using notarytool');
if (!(yield (0, notarytool_1.isNotaryToolAvailable)())) {
throw new Error('notarytool is not available, you must be on at least Xcode 13 or provide notarytoolPath');
}
yield (0, notarytool_1.notarizeAndWaitForNotaryTool)(Object.assign({ appPath }, otherOptions));
yield (0, promise_retry_1.default)(() => (0, staple_1.stapleApp)({ appPath }), {
retries: 3,
});
});
}
exports.notarize = notarize;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,kEAAkC;AAElC,uDAAoD;AACpD,6CAAmF;AACnF,qCAAqC;AAQrC,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,mBAAmB,CAAC,CAAC;AAIrC,iDAAmG;AAA1F,0HAAA,mCAAmC,OAA6B;AAmBzE,SAAe,QAAQ,CAAC,EAA6C;QAA7C,EAAE,OAAO,OAAoC,EAA/B,YAAY,cAA1B,WAA4B,CAAF;;QAChD,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;YAClC,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;SACH;QAED,MAAM,IAAA,iCAAe,EAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnC,CAAC,CAAC,6BAA6B,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,IAAA,kCAAqB,GAAE,CAAC,EAAE;YACpC,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;SACH;QAED,MAAM,IAAA,yCAA4B,EAAC,gBACjC,OAAO,IACJ,YAAY,CACU,CAAC,CAAC;QAE7B,MAAM,IAAA,uBAAK,EAAC,GAAG,EAAE,CAAC,IAAA,kBAAS,EAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACxC,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;;CACJ;AAEQ,4BAAQ"}

View File

@@ -0,0 +1,5 @@
import { LegacyNotarizeStartOptions, LegacyNotarizeWaitOptions } from './types';
/** @deprecated */
export declare function startLegacyNotarize(opts: LegacyNotarizeStartOptions): Promise<never>;
/** @deprecated */
export declare function waitForLegacyNotarize(opts: LegacyNotarizeWaitOptions): Promise<never>;

View File

@@ -0,0 +1,33 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.waitForLegacyNotarize = exports.startLegacyNotarize = void 0;
const debug_1 = __importDefault(require("debug"));
const d = (0, debug_1.default)('electron-notarize:legacy');
/** @deprecated */
function startLegacyNotarize(opts) {
return __awaiter(this, void 0, void 0, function* () {
d('starting notarize process for app:', opts.appPath);
throw new Error('Cannot start notarization. Legacy notarization (altool) is no longer available');
});
}
exports.startLegacyNotarize = startLegacyNotarize;
/** @deprecated */
function waitForLegacyNotarize(opts) {
return __awaiter(this, void 0, void 0, function* () {
throw new Error('Cannot wait for notarization. Legacy notarization (altool) is no longer available');
});
}
exports.waitForLegacyNotarize = waitForLegacyNotarize;
//# sourceMappingURL=legacy.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../src/legacy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAI1B,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,0BAA0B,CAAC,CAAC;AAE5C,kBAAkB;AAClB,SAAsB,mBAAmB,CAAC,IAAgC;;QACxE,CAAC,CAAC,oCAAoC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACpG,CAAC;CAAA;AAHD,kDAGC;AAED,kBAAkB;AAClB,SAAsB,qBAAqB,CAAC,IAA+B;;QACzE,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;CAAA;AAJD,sDAIC"}

View File

@@ -0,0 +1,3 @@
import { NotaryToolStartOptions } from './types';
export declare function isNotaryToolAvailable(notarytoolPath?: string): Promise<boolean>;
export declare function notarizeAndWaitForNotaryTool(opts: NotaryToolStartOptions): Promise<void>;

View File

@@ -0,0 +1,160 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.notarizeAndWaitForNotaryTool = exports.isNotaryToolAvailable = void 0;
const debug_1 = __importDefault(require("debug"));
const path = __importStar(require("path"));
const spawn_1 = require("./spawn");
const helpers_1 = require("./helpers");
const validate_args_1 = require("./validate-args");
const d = (0, debug_1.default)('electron-notarize:notarytool');
function runNotaryTool(args, notarytoolPath) {
const useXcrun = notarytoolPath === undefined;
const cmd = useXcrun ? 'xcrun' : notarytoolPath;
return (0, spawn_1.spawn)(cmd, useXcrun ? ['notarytool', ...args] : args);
}
function authorizationArgs(rawOpts) {
const opts = (0, validate_args_1.validateNotaryToolAuthorizationArgs)(rawOpts);
if ((0, validate_args_1.isNotaryToolPasswordCredentials)(opts)) {
return [
'--apple-id',
(0, helpers_1.makeSecret)(opts.appleId),
'--password',
(0, helpers_1.makeSecret)(opts.appleIdPassword),
'--team-id',
(0, helpers_1.makeSecret)(opts.teamId),
];
}
else if ((0, validate_args_1.isNotaryToolApiKeyCredentials)(opts)) {
return [
'--key',
(0, helpers_1.makeSecret)(opts.appleApiKey),
'--key-id',
(0, helpers_1.makeSecret)(opts.appleApiKeyId),
'--issuer',
(0, helpers_1.makeSecret)(opts.appleApiIssuer),
];
}
else {
// --keychain is optional -- when not specified, the iCloud keychain is used by notarytool
if (opts.keychain) {
return ['--keychain', opts.keychain, '--keychain-profile', opts.keychainProfile];
}
return ['--keychain-profile', opts.keychainProfile];
}
}
function getNotarizationLogs(opts, id) {
return __awaiter(this, void 0, void 0, function* () {
try {
const logResult = yield runNotaryTool(['log', id, ...authorizationArgs(opts)], opts.notarytoolPath);
d('notarization log', logResult.output);
return logResult.output;
}
catch (e) {
d('failed to pull notarization logs', e);
}
});
}
function isNotaryToolAvailable(notarytoolPath) {
return __awaiter(this, void 0, void 0, function* () {
if (notarytoolPath !== undefined) {
const result = yield (0, spawn_1.spawn)(notarytoolPath, ['--version']);
return result.code === 0;
}
else {
const result = yield (0, spawn_1.spawn)('xcrun', ['--find', 'notarytool']);
return result.code === 0;
}
});
}
exports.isNotaryToolAvailable = isNotaryToolAvailable;
function notarizeAndWaitForNotaryTool(opts) {
return __awaiter(this, void 0, void 0, function* () {
d('starting notarize process for app:', opts.appPath);
return yield (0, helpers_1.withTempDir)((dir) => __awaiter(this, void 0, void 0, function* () {
const fileExt = path.extname(opts.appPath);
let filePath;
if (fileExt === '.dmg' || fileExt === '.pkg') {
filePath = path.resolve(dir, opts.appPath);
d('attempting to upload file to Apple: ', filePath);
}
else {
filePath = path.resolve(dir, `${path.parse(opts.appPath).name}.zip`);
d('zipping application to:', filePath);
const zipResult = yield (0, spawn_1.spawn)('ditto', ['-c', '-k', '--sequesterRsrc', '--keepParent', path.basename(opts.appPath), filePath], {
cwd: path.dirname(opts.appPath),
});
if (zipResult.code !== 0) {
throw new Error(`Failed to zip application, exited with code: ${zipResult.code}\n\n${zipResult.output}`);
}
d('zip succeeded, attempting to upload to Apple');
}
const notarizeArgs = [
'submit',
filePath,
...authorizationArgs(opts),
'--wait',
'--output-format',
'json',
];
const result = yield runNotaryTool(notarizeArgs, opts.notarytoolPath);
const rawOut = result.output.trim();
let parsed;
try {
parsed = JSON.parse(rawOut);
}
catch (err) {
throw new Error(`Failed to notarize via notarytool. Failed with unexpected result: \n\n${rawOut}`);
}
let logOutput;
if (typeof parsed.id === 'string') {
logOutput = yield getNotarizationLogs(opts, parsed.id);
}
if (result.code === 0 && parsed.status === 'Accepted') {
d(`notarization success (id: ${parsed.id})`);
return;
}
let message = `Failed to notarize via notarytool\n\n${result.output}`;
if (logOutput) {
message += `\n\nDiagnostics from notarytool log: ${logOutput}`;
}
throw new Error(message);
}));
});
}
exports.notarizeAndWaitForNotaryTool = notarizeAndWaitForNotaryTool;
//# sourceMappingURL=notarytool.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"notarytool.js","sourceRoot":"","sources":["../src/notarytool.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,6 @@
import { SpawnOptions } from 'child_process';
export interface SpawnResult {
code: number | null;
output: string;
}
export declare const spawn: (cmd: string, args?: string[], opts?: SpawnOptions) => Promise<SpawnResult>;

View File

@@ -0,0 +1,32 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.spawn = void 0;
const child_process_1 = require("child_process");
const debug_1 = __importDefault(require("debug"));
const helpers_1 = require("./helpers");
const d = (0, debug_1.default)('electron-notarize:spawn');
const spawn = (cmd, args = [], opts = {}) => {
d('spawning cmd:', cmd, 'args:', args.map(arg => ((0, helpers_1.isSecret)(arg) ? '*********' : arg)), 'opts:', opts);
const child = (0, child_process_1.spawn)(cmd, args, opts);
const out = [];
const dataHandler = (data) => out.push(data.toString());
child.stdout.on('data', dataHandler);
child.stderr.on('data', dataHandler);
return new Promise((resolve, reject) => {
child.on('error', err => {
reject(err);
});
child.on('exit', code => {
d(`cmd ${cmd} terminated with code: ${code}`);
resolve({
code,
output: out.join(''),
});
});
});
};
exports.spawn = spawn;
//# sourceMappingURL=spawn.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../src/spawn.ts"],"names":[],"mappings":";;;;;;AAAA,iDAA+D;AAC/D,kDAA0B;AAC1B,uCAAqC;AAErC,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,yBAAyB,CAAC,CAAC;AAOpC,MAAM,KAAK,GAAG,CACnB,GAAW,EACX,OAAiB,EAAE,EACnB,OAAqB,EAAE,EACD,EAAE;IACxB,CAAC,CACC,eAAe,EACf,GAAG,EACH,OAAO,EACP,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAA,kBAAQ,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACpD,OAAO,EACP,IAAI,CACL,CAAC;IACF,MAAM,KAAK,GAAG,IAAA,qBAAO,EAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,KAAK,CAAC,MAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YACtB,CAAC,CAAC,OAAO,GAAG,0BAA0B,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC;gBACN,IAAI;gBACJ,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aACrB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA9BW,QAAA,KAAK,SA8BhB"}

View File

@@ -0,0 +1,2 @@
import { NotaryToolNotarizeAppOptions } from './types';
export declare function stapleApp(opts: NotaryToolNotarizeAppOptions): Promise<void>;

View File

@@ -0,0 +1,57 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.stapleApp = void 0;
const debug_1 = __importDefault(require("debug"));
const path = __importStar(require("path"));
const spawn_1 = require("./spawn");
const d = (0, debug_1.default)('electron-notarize:staple');
function stapleApp(opts) {
return __awaiter(this, void 0, void 0, function* () {
d('attempting to staple app:', opts.appPath);
const result = yield (0, spawn_1.spawn)('xcrun', ['stapler', 'staple', '-v', path.basename(opts.appPath)], {
cwd: path.dirname(opts.appPath),
});
if (result.code !== 0) {
throw new Error(`Failed to staple your application with code: ${result.code}\n\n${result.output}`);
}
d('staple succeeded');
return;
});
}
exports.stapleApp = stapleApp;
//# sourceMappingURL=staple.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"staple.js","sourceRoot":"","sources":["../src/staple.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,2CAA6B;AAE7B,mCAAgC;AAGhC,MAAM,CAAC,GAAG,IAAA,eAAK,EAAC,0BAA0B,CAAC,CAAC;AAE5C,SAAsB,SAAS,CAAC,IAAkC;;QAChE,CAAC,CAAC,2BAA2B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAA,aAAK,EAAC,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;YAC5F,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE;YACrB,MAAM,IAAI,KAAK,CACb,gDAAgD,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,MAAM,EAAE,CAClF,CAAC;SACH;QAED,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;CAAA;AAdD,8BAcC"}

View File

@@ -0,0 +1,169 @@
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export interface LegacyNotarizePasswordCredentials {
appleId: string;
appleIdPassword: string;
}
/**
* You can generate an [app-specific password](https://support.apple.com/en-us/102654) for your Apple ID
* to notarize your Electron applications.
*
* This method also requires you to specify the [Team ID](https://developer.apple.com/help/account/manage-your-team/locate-your-team-id/)
* of the Developer Team you want to notarize under. An Apple ID may be part of multiple Teams.
*
* @category Credential Strategies
*/
export interface NotaryToolPasswordCredentials {
/**
* The login username of your Apple Developer account.
*/
appleId: string;
/**
* An [app-specific password](https://support.apple.com/en-us/102654) for your
* Apple ID (**not** your Apple ID password).
*
* Do **not** hard code this password into your packaging scripts.
*/
appleIdPassword: string;
/**
* The [Team ID](https://developer.apple.com/help/account/manage-your-team/locate-your-team-id/)
* for the Developer Team you want to notarize under. Your Apple ID may be a member of multiple
* teams.
*/
teamId: string;
}
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export interface LegacyNotarizeApiKeyCredentials {
appleApiKey: string;
appleApiIssuer: string;
}
/**
* Credentials required for JSON Web Token (JWT) notarization using App Store Connect API keys.
*
* @category Credential Strategies
*/
export interface NotaryToolApiKeyCredentials {
/**
* File system path to the `.p8` private key of your App Store Connect API key.
*/
appleApiKey: string;
/**
* App Store Connect API Key ID (e.g. `T9GPZ92M7K`).
*
*/
appleApiKeyId: string;
/**
* App Store Connect API Issuer ID. The issuer ID is a UUID format string
* (e.g. `c055ca8c-e5a8-4836-b61d-aa5794eeb3f4`).
*/
appleApiIssuer: string;
}
/**
* Options required for authenticating notarytool by storing
* credentials inside the system Keychain item.
*
* You can store {@link NotaryToolPasswordCredentials} or
* {@link NotaryToolApiKeyCredentials} into the Keychain
* using `xcrun notarytool store-credentials` and access the
* stored secrets when signing your code.
*
* @category Credential Strategies
*/
export interface NotaryToolKeychainCredentials {
/**
* The name of the profile you provided when storing notarization credentials.
*/
keychainProfile: string;
/**
* The name of the keychain or path to the keychain you stored notarization credentials in.
* @defaultValue If omitted, the system default `login` keychain will be used.
*/
keychain?: string;
}
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export type LegacyNotarizeCredentials = LegacyNotarizePasswordCredentials | LegacyNotarizeApiKeyCredentials;
/**
* Credential options for authenticating `notarytool`. There are three valid stategies available:
*
* - {@link NotaryToolPasswordCredentials} — Using an Apple ID and app-specific password
* - {@link NotaryToolApiKeyCredentials} — Using an App Store Connect API key
* - {@link NotaryToolKeychainCredentials} — Using one of the two above credential sets stored within the macOS Keychain
* @category Credential Strategies
*/
export type NotaryToolCredentials = NotaryToolPasswordCredentials | NotaryToolApiKeyCredentials | NotaryToolKeychainCredentials;
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export interface LegacyNotarizeAppOptions {
appPath: string;
appBundleId: string;
}
/**
* Non-credential options for notarizing your application with `notarytool`.
* @category Core
*/
export interface NotaryToolNotarizeAppOptions {
/**
* Absolute path to your packaged and codesigned Electron application.
*/
appPath: string;
notarytoolPath?: string;
}
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
interface TransporterOptions {
ascProvider?: string;
}
/**
* @deprecated This interface was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
interface NotarizeResult {
uuid: string;
}
/**
* @deprecated This type was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export type LegacyNotarizeStartOptions = LegacyNotarizeAppOptions & LegacyNotarizeCredentials & TransporterOptions;
/**
* @deprecated This type was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export type LegacyNotarizeWaitOptions = NotarizeResult & LegacyNotarizeCredentials;
/**
* @deprecated This type was used for Apple's `altool`, which was sunset in 2023 and no longer works.
* @category Legacy
*/
export type NotarizeOptionsLegacy = {
tool: 'legacy';
} & LegacyNotarizeStartOptions;
/**
* Options for notarizing your Electron app with `notarytool`.
* @category Core
*/
export type NotaryToolStartOptions = NotaryToolNotarizeAppOptions & NotaryToolCredentials;
/**
* Helper type that specifies that `@electron/notarize` is using the `notarytool` strategy.
* @category Utility Types
*/
export type NotarizeOptionsNotaryTool = {
tool?: 'notarytool';
} & NotaryToolStartOptions;
/**
* Options accepted by the `notarize` method.
* @internal
*/
export type NotarizeOptions = NotarizeOptionsLegacy | NotarizeOptionsNotaryTool;
export {};

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,14 @@
import { LegacyNotarizeApiKeyCredentials, LegacyNotarizeCredentials, LegacyNotarizePasswordCredentials, NotaryToolApiKeyCredentials, NotaryToolCredentials, NotaryToolKeychainCredentials, NotaryToolPasswordCredentials } from './types';
/** @deprecated */
export declare function isLegacyPasswordCredentials(opts: LegacyNotarizeCredentials): opts is LegacyNotarizePasswordCredentials;
/** @deprecated */
export declare function isLegacyApiKeyCredentials(opts: LegacyNotarizeCredentials): opts is LegacyNotarizeApiKeyCredentials;
/** @deprecated */
export declare function validateLegacyAuthorizationArgs(opts: LegacyNotarizeCredentials): LegacyNotarizeCredentials;
export declare function isNotaryToolPasswordCredentials(opts: NotaryToolCredentials): opts is NotaryToolPasswordCredentials;
export declare function isNotaryToolApiKeyCredentials(opts: NotaryToolCredentials): opts is NotaryToolApiKeyCredentials;
export declare function isNotaryToolKeychainCredentials(opts: NotaryToolCredentials): opts is NotaryToolKeychainCredentials;
/**
* @internal
*/
export declare function validateNotaryToolAuthorizationArgs(opts: NotaryToolCredentials): NotaryToolCredentials;

View File

@@ -0,0 +1,109 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateNotaryToolAuthorizationArgs = exports.isNotaryToolKeychainCredentials = exports.isNotaryToolApiKeyCredentials = exports.isNotaryToolPasswordCredentials = exports.validateLegacyAuthorizationArgs = exports.isLegacyApiKeyCredentials = exports.isLegacyPasswordCredentials = void 0;
/** @deprecated */
function isLegacyPasswordCredentials(opts) {
const creds = opts;
return creds.appleId !== undefined || creds.appleIdPassword !== undefined;
}
exports.isLegacyPasswordCredentials = isLegacyPasswordCredentials;
/** @deprecated */
function isLegacyApiKeyCredentials(opts) {
const creds = opts;
return creds.appleApiKey !== undefined || creds.appleApiIssuer !== undefined;
}
exports.isLegacyApiKeyCredentials = isLegacyApiKeyCredentials;
/** @deprecated */
function validateLegacyAuthorizationArgs(opts) {
const isPassword = isLegacyPasswordCredentials(opts);
const isApiKey = isLegacyApiKeyCredentials(opts);
if (isPassword && isApiKey) {
throw new Error('Cannot use both password credentials and API key credentials at once');
}
if (isPassword) {
const passwordCreds = opts;
if (!passwordCreds.appleId) {
throw new Error('The appleId property is required when using notarization with appleIdPassword');
}
else if (!passwordCreds.appleIdPassword) {
throw new Error('The appleIdPassword property is required when using notarization with appleId');
}
return passwordCreds;
}
if (isApiKey) {
const apiKeyCreds = opts;
if (!apiKeyCreds.appleApiKey) {
throw new Error('The appleApiKey property is required when using notarization with appleApiIssuer');
}
else if (!apiKeyCreds.appleApiIssuer) {
throw new Error('The appleApiIssuer property is required when using notarization with appleApiKey');
}
return apiKeyCreds;
}
throw new Error('No authentication properties provided (e.g. appleId, appleApiKey)');
}
exports.validateLegacyAuthorizationArgs = validateLegacyAuthorizationArgs;
function isNotaryToolPasswordCredentials(opts) {
const creds = opts;
return (creds.appleId !== undefined || creds.appleIdPassword !== undefined || creds.teamId !== undefined);
}
exports.isNotaryToolPasswordCredentials = isNotaryToolPasswordCredentials;
function isNotaryToolApiKeyCredentials(opts) {
const creds = opts;
return (creds.appleApiIssuer !== undefined ||
creds.appleApiKey !== undefined ||
creds.appleApiKeyId !== undefined);
}
exports.isNotaryToolApiKeyCredentials = isNotaryToolApiKeyCredentials;
function isNotaryToolKeychainCredentials(opts) {
const creds = opts;
return creds.keychain !== undefined || creds.keychainProfile !== undefined;
}
exports.isNotaryToolKeychainCredentials = isNotaryToolKeychainCredentials;
/**
* @internal
*/
function validateNotaryToolAuthorizationArgs(opts) {
const isPassword = isNotaryToolPasswordCredentials(opts);
const isApiKey = isNotaryToolApiKeyCredentials(opts);
const isKeychain = isNotaryToolKeychainCredentials(opts);
if ((isPassword ? 1 : 0) + (isApiKey ? 1 : 0) + (isKeychain ? 1 : 0) > 1) {
throw new Error('Cannot use password credentials, API key credentials and keychain credentials at once');
}
if (isPassword) {
const passwordCreds = opts;
if (!passwordCreds.appleId) {
throw new Error('The appleId property is required when using notarization with password credentials');
}
else if (!passwordCreds.appleIdPassword) {
throw new Error('The appleIdPassword property is required when using notarization with password credentials');
}
else if (!passwordCreds.teamId) {
throw new Error('The teamId property is required when using notarization with password credentials');
}
return passwordCreds;
}
if (isApiKey) {
const apiKeyCreds = opts;
if (!apiKeyCreds.appleApiKey) {
throw new Error('The appleApiKey property is required when using notarization with ASC credentials');
}
else if (!apiKeyCreds.appleApiIssuer) {
throw new Error('The appleApiIssuer property is required when using notarization with ASC credentials');
}
else if (!apiKeyCreds.appleApiKeyId) {
throw new Error('The appleApiKeyId property is required when using notarization with ASC credentials');
}
return apiKeyCreds;
}
if (isKeychain) {
const keychainCreds = opts;
if (!keychainCreds.keychainProfile) {
throw new Error('The keychainProfile property is required when using notarization with keychain credentials');
}
return keychainCreds;
}
throw new Error('No authentication properties provided (e.g. appleId, appleApiKey, keychain)');
}
exports.validateNotaryToolAuthorizationArgs = validateNotaryToolAuthorizationArgs;
//# sourceMappingURL=validate-args.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"validate-args.js","sourceRoot":"","sources":["../src/validate-args.ts"],"names":[],"mappings":"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"}