eas-cli
Version:
EAS command line tool
140 lines (139 loc) • 6.14 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const AppSpecificPasswordSource_1 = require("./AppSpecificPasswordSource");
const AscApiKeySource_1 = require("./AscApiKeySource");
const AnalyticsManager_1 = require("../../analytics/AnalyticsManager");
const SubmissionMutation_1 = require("../../graphql/mutations/SubmissionMutation");
const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
const BaseSubmitter_1 = tslib_1.__importDefault(require("../BaseSubmitter"));
const summary_1 = require("../utils/summary");
class IosSubmitter extends BaseSubmitter_1.default {
constructor(ctx, options, archive) {
const sourceOptionsResolver = {
// eslint-disable-next-line async-protect/async-suffix
archive: async () => archive,
// eslint-disable-next-line async-protect/async-suffix
credentials: async () => {
const maybeAppSpecificPassword = this.options.appSpecificPasswordSource
? await (0, AppSpecificPasswordSource_1.getAppSpecificPasswordLocallyAsync)(this.ctx, this.options.appSpecificPasswordSource)
: null;
const maybeAppStoreConnectApiKey = this.options.ascApiKeySource
? await (0, AscApiKeySource_1.getAscApiKeyResultAsync)(this.ctx, this.options.ascApiKeySource)
: null;
return {
...(maybeAppSpecificPassword ? { appSpecificPassword: maybeAppSpecificPassword } : null),
...(maybeAppStoreConnectApiKey ? { ascApiKeyResult: maybeAppStoreConnectApiKey } : null),
};
},
};
const sourceOptionsAnalytics = {
archive: {
attemptEvent: AnalyticsManager_1.SubmissionEvent.GATHER_ARCHIVE_ATTEMPT,
successEvent: AnalyticsManager_1.SubmissionEvent.GATHER_ARCHIVE_SUCCESS,
failureEvent: AnalyticsManager_1.SubmissionEvent.GATHER_ARCHIVE_FAIL,
},
credentials: {
attemptEvent: AnalyticsManager_1.SubmissionEvent.GATHER_CREDENTIALS_ATTEMPT,
successEvent: AnalyticsManager_1.SubmissionEvent.GATHER_CREDENTIALS_SUCCESS,
failureEvent: AnalyticsManager_1.SubmissionEvent.GATHER_CREDENTIALS_FAIL,
},
};
super(ctx, options, sourceOptionsResolver, sourceOptionsAnalytics);
}
async createSubmissionInputAsync(resolvedSourceOptions) {
const submissionConfig = this.formatSubmissionConfig(this.options, resolvedSourceOptions);
(0, summary_1.printSummary)(this.prepareSummaryData(this.options, resolvedSourceOptions), SummaryHumanReadableKeys);
return {
projectId: this.options.projectId,
submissionConfig,
...this.formatArchive(resolvedSourceOptions.archive),
};
}
async createPlatformSubmissionAsync({ projectId, submissionConfig, buildId, archiveSource, }) {
return await SubmissionMutation_1.SubmissionMutation.createIosSubmissionAsync(this.ctx.graphqlClient, {
appId: projectId,
config: submissionConfig,
submittedBuildId: buildId,
archiveSource,
});
}
formatSubmissionConfig(options, { credentials }) {
const { appSpecificPassword, ascApiKeyResult } = credentials;
const { appleIdUsername, ascAppIdentifier } = options;
const { isVerboseFastlaneEnabled } = this.ctx;
return {
ascAppIdentifier,
appleIdUsername,
isVerboseFastlaneEnabled,
...(appSpecificPassword ? this.formatAppSpecificPassword(appSpecificPassword) : null),
...(ascApiKeyResult?.result ? this.formatAscApiKeyResult(ascApiKeyResult.result) : null),
};
}
formatAppSpecificPassword(appSpecificPassword) {
return {
appleAppSpecificPassword: appSpecificPassword.password,
appleIdUsername: appSpecificPassword.appleIdUsername,
};
}
formatAscApiKeyResult(result) {
return 'ascApiKeyId' in result
? { ascApiKeyId: result.ascApiKeyId }
: {
ascApiKey: {
keyP8: result.keyP8,
keyIdentifier: result.keyId,
issuerIdentifier: result.issuerId,
},
};
}
prepareSummaryData(options, { archive, credentials }) {
const { ascApiKeyResult, appSpecificPassword } = credentials;
const { ascAppIdentifier, projectId } = options;
// structuring order affects table rows order
return {
ascAppIdentifier,
projectId,
...(appSpecificPassword ? { appleIdUsername: appSpecificPassword.appleIdUsername } : null),
...(ascApiKeyResult ? { formattedAscApiKey: formatAscApiKeySummary(ascApiKeyResult) } : null),
...(0, summary_1.formatArchiveSourceSummary)(archive),
};
}
}
exports.default = IosSubmitter;
const SummaryHumanReadableKeys = {
ascAppIdentifier: 'ASC App ID',
appleIdUsername: 'Apple ID',
projectId: 'Project ID',
archiveUrl: 'Archive URL',
archivePath: 'Archive Path',
formattedBuild: 'Build',
formattedAscApiKey: 'App Store Connect API Key',
};
function formatAscApiKeySummary({ summary }) {
const { source, path, keyId, name } = summary;
const fields = [
{
label: 'Key Name',
value: name,
},
{
label: 'Key ID',
value: keyId,
},
{
label: 'Key Source',
value: source,
},
{
label: 'Key Path',
value: path,
},
];
const filteredFields = fields.filter(({ value }) => value !== undefined && value !== null);
return ('\n' +
(0, formatFields_1.default)(filteredFields, {
labelFormat: label => ` ${chalk_1.default.dim(label)}:`,
}));
}
;