eas-cli 0.34.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -27
- package/build/analytics/common.d.ts +8 -0
- package/build/analytics/common.js +19 -0
- package/build/analytics/events.d.ts +43 -0
- package/build/analytics/events.js +51 -0
- package/build/{analytics.d.ts → analytics/rudderstackClient.d.ts} +0 -0
- package/build/{analytics.js → analytics/rudderstackClient.js} +2 -2
- package/build/api.js +3 -3
- package/build/build/build.js +18 -27
- package/build/build/context.d.ts +1 -1
- package/build/build/context.js +2 -2
- package/build/build/ios/credentials.js +3 -3
- package/build/build/local.js +18 -27
- package/build/build/types.d.ts +0 -1
- package/build/build/utils/devClient.js +6 -3
- package/build/build/utils/formatBuild.js +1 -9
- package/build/build/utils/url.js +1 -1
- package/build/commandUtils/EasCommand.js +4 -4
- package/build/commands/build/index.js +14 -5
- package/build/commands/secret/delete.js +1 -1
- package/build/credentials/android/AndroidCredentialsProvider.js +2 -2
- package/build/credentials/android/actions/RemoveFcm.js +4 -4
- package/build/credentials/android/actions/{SetupBuildCredentials.d.ts → SetUpBuildCredentials.d.ts} +1 -1
- package/build/credentials/android/actions/{SetupBuildCredentials.js → SetUpBuildCredentials.js} +3 -3
- package/build/credentials/android/actions/{SetupBuildCredentialsFromCredentialsJson.d.ts → SetUpBuildCredentialsFromCredentialsJson.d.ts} +1 -1
- package/build/credentials/android/actions/{SetupBuildCredentialsFromCredentialsJson.js → SetUpBuildCredentialsFromCredentialsJson.js} +3 -3
- package/build/credentials/android/actions/{SetupGoogleServiceAccountKey.d.ts → SetUpGoogleServiceAccountKey.d.ts} +1 -1
- package/build/credentials/android/actions/{SetupGoogleServiceAccountKey.js → SetUpGoogleServiceAccountKey.js} +3 -3
- package/build/credentials/android/utils/keystore.js +67 -32
- package/build/credentials/errors.d.ts +4 -0
- package/build/credentials/errors.js +8 -1
- package/build/credentials/ios/IosCredentialsProvider.js +4 -4
- package/build/credentials/ios/actions/AscApiKeyUtils.d.ts +17 -1
- package/build/credentials/ios/actions/AscApiKeyUtils.js +158 -24
- package/build/credentials/ios/actions/AssignAscApiKey.d.ts +9 -0
- package/build/credentials/ios/actions/AssignAscApiKey.js +29 -0
- package/build/credentials/ios/actions/CreateAscApiKey.d.ts +9 -0
- package/build/credentials/ios/actions/CreateAscApiKey.js +21 -0
- package/build/credentials/ios/actions/DistributionCertificateUtils.js +1 -1
- package/build/credentials/ios/actions/PushKeyUtils.js +1 -1
- package/build/credentials/ios/actions/RemoveAscApiKey.d.ts +14 -0
- package/build/credentials/ios/actions/RemoveAscApiKey.js +55 -0
- package/build/credentials/ios/actions/{SetupAdhocProvisioningProfile.d.ts → SetUpAdhocProvisioningProfile.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupAdhocProvisioningProfile.js → SetUpAdhocProvisioningProfile.js} +5 -5
- package/build/credentials/ios/actions/SetUpAscApiKey.d.ts +21 -0
- package/build/credentials/ios/actions/SetUpAscApiKey.js +114 -0
- package/build/credentials/ios/actions/{SetupBuildCredentials.d.ts → SetUpBuildCredentials.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupBuildCredentials.js → SetUpBuildCredentials.js} +5 -5
- package/build/credentials/ios/actions/{SetupBuildCredentialsFromCredentialsJson.d.ts → SetUpBuildCredentialsFromCredentialsJson.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupBuildCredentialsFromCredentialsJson.js → SetUpBuildCredentialsFromCredentialsJson.js} +5 -5
- package/build/credentials/ios/actions/{SetupDistributionCertificate.d.ts → SetUpDistributionCertificate.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupDistributionCertificate.js → SetUpDistributionCertificate.js} +3 -3
- package/build/credentials/ios/actions/{SetupInternalProvisioningProfile.d.ts → SetUpInternalProvisioningProfile.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupInternalProvisioningProfile.js → SetUpInternalProvisioningProfile.js} +7 -7
- package/build/credentials/ios/actions/{SetupProvisioningProfile.d.ts → SetUpProvisioningProfile.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupProvisioningProfile.js → SetUpProvisioningProfile.js} +5 -5
- package/build/credentials/ios/actions/{SetupPushKey.d.ts → SetUpPushKey.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupPushKey.js → SetUpPushKey.js} +3 -3
- package/build/credentials/ios/actions/SetUpSubmissionCredentials.d.ts +10 -0
- package/build/credentials/ios/actions/SetUpSubmissionCredentials.js +53 -0
- package/build/credentials/ios/actions/{SetupTargetBuildCredentials.d.ts → SetUpTargetBuildCredentials.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupTargetBuildCredentials.js → SetUpTargetBuildCredentials.js} +10 -10
- package/build/credentials/ios/actions/{SetupTargetBuildCredentialsFromCredentialsJson.d.ts → SetUpTargetBuildCredentialsFromCredentialsJson.d.ts} +1 -1
- package/build/credentials/ios/actions/{SetupTargetBuildCredentialsFromCredentialsJson.js → SetUpTargetBuildCredentialsFromCredentialsJson.js} +3 -3
- package/build/credentials/ios/api/GraphqlClient.d.ts +8 -2
- package/build/credentials/ios/api/GraphqlClient.js +74 -2
- package/build/credentials/ios/api/graphql/mutations/AppStoreConnectApiKeyMutation.d.ts +5 -0
- package/build/credentials/ios/api/graphql/mutations/AppStoreConnectApiKeyMutation.js +54 -0
- package/build/credentials/ios/api/graphql/mutations/IosAppCredentialsMutation.d.ts +1 -0
- package/build/credentials/ios/api/graphql/mutations/IosAppCredentialsMutation.js +25 -0
- package/build/credentials/ios/api/graphql/queries/AppStoreConnectApiKeyQuery.d.ts +4 -0
- package/build/credentials/ios/api/graphql/queries/AppStoreConnectApiKeyQuery.js +33 -0
- package/build/credentials/ios/appstore/AppStoreApi.d.ts +1 -1
- package/build/credentials/ios/appstore/Credentials.types.d.ts +1 -0
- package/build/credentials/ios/appstore/ascApiKey.d.ts +1 -1
- package/build/credentials/ios/appstore/ascApiKey.js +11 -1
- package/build/credentials/ios/appstore/entitlements.d.ts +2 -2
- package/build/credentials/ios/appstore/entitlements.js +20 -10
- package/build/credentials/ios/credentials.d.ts +2 -1
- package/build/credentials/ios/credentials.js +7 -2
- package/build/credentials/ios/utils/printCredentials.js +30 -1
- package/build/credentials/ios/validators/validateAscApiKey.d.ts +5 -0
- package/build/credentials/ios/validators/validateAscApiKey.js +21 -0
- package/build/credentials/manager/Actions.d.ts +20 -15
- package/build/credentials/manager/Actions.js +20 -15
- package/build/credentials/manager/AndroidActions.js +6 -6
- package/build/credentials/manager/IosActions.d.ts +1 -0
- package/build/credentials/manager/IosActions.js +40 -5
- package/build/credentials/manager/ManageAndroid.js +6 -6
- package/build/credentials/manager/ManageIos.js +56 -17
- package/build/credentials/utils/promptForCredentials.d.ts +2 -1
- package/build/credentials/utils/promptForCredentials.js +3 -2
- package/build/graphql/client.js +1 -1
- package/build/graphql/generated.d.ts +233 -82
- package/build/graphql/mutations/KeystoreGenerationUrlMutation.d.ts +3 -0
- package/build/graphql/mutations/KeystoreGenerationUrlMutation.js +23 -0
- package/build/graphql/types/Build.js +1 -6
- package/build/graphql/types/credentials/AppStoreConnectApiKey.d.ts +1 -0
- package/build/graphql/types/credentials/AppStoreConnectApiKey.js +23 -0
- package/build/graphql/types/credentials/IosAppCredentials.js +6 -0
- package/build/submit/ArchiveSource.js +2 -1
- package/build/submit/BaseSubmitter.d.ts +20 -4
- package/build/submit/BaseSubmitter.js +34 -1
- package/build/submit/android/AndroidSubmitter.d.ts +12 -6
- package/build/submit/android/AndroidSubmitter.js +31 -20
- package/build/submit/android/ServiceAccountSource.js +2 -2
- package/build/submit/context.d.ts +2 -0
- package/build/submit/context.js +14 -0
- package/build/submit/ios/AppSpecificPasswordSource.d.ts +9 -6
- package/build/submit/ios/AppSpecificPasswordSource.js +42 -20
- package/build/submit/ios/AscApiKeySource.d.ts +9 -3
- package/build/submit/ios/AscApiKeySource.js +10 -10
- package/build/submit/ios/CredentialsServiceSource.d.ts +15 -0
- package/build/submit/ios/CredentialsServiceSource.js +52 -0
- package/build/submit/ios/IosSubmitCommand.d.ts +1 -2
- package/build/submit/ios/IosSubmitCommand.js +24 -53
- package/build/submit/ios/IosSubmitter.d.ts +20 -7
- package/build/submit/ios/IosSubmitter.js +79 -43
- package/build/submit/submit.js +13 -4
- package/build/submit/utils/errors.js +2 -0
- package/build/user/User.js +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +6 -6
- package/build/build/utils/analytics.d.ts +0 -22
- package/build/build/utils/analytics.js +0 -28
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFromCredentialsServiceAsync = exports.CREDENTIALS_SERVICE_SOURCE = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const nullthrows_1 = (0, tslib_1.__importDefault)(require("nullthrows"));
|
|
6
|
+
const SetUpSubmissionCredentials_1 = require("../../credentials/ios/actions/SetUpSubmissionCredentials");
|
|
7
|
+
const log_1 = (0, tslib_1.__importDefault)(require("../../log"));
|
|
8
|
+
const bundleIdentifier_1 = require("../../project/ios/bundleIdentifier");
|
|
9
|
+
const Account_1 = require("../../user/Account");
|
|
10
|
+
const AppSpecificPasswordSource_1 = require("./AppSpecificPasswordSource");
|
|
11
|
+
/**
|
|
12
|
+
* The Credentials Service will either return an ASC API Key or an App Specific Password
|
|
13
|
+
* When we no longer support the App Specific Password user prompt, refactor this into the AscApiKeySource
|
|
14
|
+
*/
|
|
15
|
+
exports.CREDENTIALS_SERVICE_SOURCE = 'CREDENTIALS_SERVICE_SOURCE';
|
|
16
|
+
async function getFromCredentialsServiceAsync(ctx) {
|
|
17
|
+
const bundleIdentifier = await (0, bundleIdentifier_1.getBundleIdentifierAsync)(ctx.projectDir, ctx.exp);
|
|
18
|
+
log_1.default.log(`Looking up credentials configuration for ${bundleIdentifier}...`);
|
|
19
|
+
const appLookupParams = {
|
|
20
|
+
account: (0, nullthrows_1.default)((0, Account_1.findAccountByName)(ctx.user.accounts, ctx.accountName), `You do not have access to account: ${ctx.accountName}`),
|
|
21
|
+
projectName: ctx.projectName,
|
|
22
|
+
bundleIdentifier,
|
|
23
|
+
};
|
|
24
|
+
const setupSubmissionCredentialsAction = new SetUpSubmissionCredentials_1.SetUpSubmissionCredentials(appLookupParams);
|
|
25
|
+
const ascOrAsp = await setupSubmissionCredentialsAction.runAsync(ctx.credentialsCtx);
|
|
26
|
+
const isAppSpecificPassword = typeof ascOrAsp === 'string';
|
|
27
|
+
if (isAppSpecificPassword) {
|
|
28
|
+
return {
|
|
29
|
+
appSpecificPassword: {
|
|
30
|
+
password: ascOrAsp,
|
|
31
|
+
appleIdUsername: await (0, AppSpecificPasswordSource_1.getAppleIdUsernameAsync)(ctx),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const ascKeyForSubmissions = (0, nullthrows_1.default)(ascOrAsp.appStoreConnectApiKeyForSubmissions, `An EAS Submit ASC API Key could not be found for ${ascOrAsp.appleAppIdentifier.bundleIdentifier}`);
|
|
37
|
+
const { id, keyIdentifier, name } = ascKeyForSubmissions;
|
|
38
|
+
return {
|
|
39
|
+
ascApiKeyResult: {
|
|
40
|
+
result: {
|
|
41
|
+
ascApiKeyId: id,
|
|
42
|
+
},
|
|
43
|
+
summary: {
|
|
44
|
+
source: 'EAS servers',
|
|
45
|
+
keyId: keyIdentifier,
|
|
46
|
+
name: name !== null && name !== void 0 ? name : undefined,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.getFromCredentialsServiceAsync = getFromCredentialsServiceAsync;
|
|
@@ -5,11 +5,10 @@ export default class IosSubmitCommand {
|
|
|
5
5
|
private ctx;
|
|
6
6
|
constructor(ctx: SubmissionContext<Platform.IOS>);
|
|
7
7
|
runAsync(): Promise<SubmissionFragment>;
|
|
8
|
-
private
|
|
8
|
+
private resolveCredentialSubmissionOptions;
|
|
9
9
|
private resolveSubmissionOptionsAsync;
|
|
10
10
|
private resolveAppSpecificPasswordSource;
|
|
11
11
|
private resolveAscApiKeySource;
|
|
12
12
|
private resolveArchiveSource;
|
|
13
13
|
private resolveAscAppIdentifierAsync;
|
|
14
|
-
private resolveAppleIdUsernameAsync;
|
|
15
14
|
}
|
|
@@ -8,12 +8,11 @@ const getenv_1 = (0, tslib_1.__importDefault)(require("getenv"));
|
|
|
8
8
|
const wrap_ansi_1 = (0, tslib_1.__importDefault)(require("wrap-ansi"));
|
|
9
9
|
const errors_1 = require("../../credentials/errors");
|
|
10
10
|
const log_1 = (0, tslib_1.__importStar)(require("../../log"));
|
|
11
|
-
const prompts_1 = require("../../prompts");
|
|
12
|
-
const UserSettings_1 = (0, tslib_1.__importDefault)(require("../../user/UserSettings"));
|
|
13
11
|
const commons_1 = require("../commons");
|
|
14
12
|
const AppProduce_1 = require("./AppProduce");
|
|
15
13
|
const AppSpecificPasswordSource_1 = require("./AppSpecificPasswordSource");
|
|
16
14
|
const AscApiKeySource_1 = require("./AscApiKeySource");
|
|
15
|
+
const CredentialsServiceSource_1 = require("./CredentialsServiceSource");
|
|
17
16
|
const IosSubmitter_1 = (0, tslib_1.__importDefault)(require("./IosSubmitter"));
|
|
18
17
|
class IosSubmitCommand {
|
|
19
18
|
constructor(ctx) {
|
|
@@ -25,32 +24,39 @@ class IosSubmitCommand {
|
|
|
25
24
|
const submitter = new IosSubmitter_1.default(this.ctx, options);
|
|
26
25
|
return await submitter.submitAsync();
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
// Fall back to app specific password if no ascApiKey defined
|
|
27
|
+
resolveCredentialSubmissionOptions() {
|
|
30
28
|
const ascApiKeySource = this.resolveAscApiKeySource();
|
|
31
|
-
const
|
|
32
|
-
if (
|
|
33
|
-
return { appSpecificPasswordSource: this.resolveAppSpecificPasswordSource() };
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
29
|
+
const shouldSkipAscApiKeySource = !ascApiKeySource.ok && ascApiKeySource.enforceError() instanceof errors_1.MissingCredentialsError;
|
|
30
|
+
if (!shouldSkipAscApiKeySource) {
|
|
36
31
|
return { ascApiKeySource };
|
|
37
32
|
}
|
|
33
|
+
const appSpecificPasswordSource = this.resolveAppSpecificPasswordSource();
|
|
34
|
+
const shouldSkipAppSpecificPasswordSource = !appSpecificPasswordSource.ok &&
|
|
35
|
+
appSpecificPasswordSource.enforceError() instanceof errors_1.MissingCredentialsError;
|
|
36
|
+
if (!shouldSkipAppSpecificPasswordSource) {
|
|
37
|
+
return { appSpecificPasswordSource: this.resolveAppSpecificPasswordSource() };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
credentialsServiceSource: (0, results_1.result)(CredentialsServiceSource_1.CREDENTIALS_SERVICE_SOURCE),
|
|
41
|
+
};
|
|
38
42
|
}
|
|
39
43
|
async resolveSubmissionOptionsAsync() {
|
|
40
44
|
const archiveSource = this.resolveArchiveSource();
|
|
41
|
-
const credentialsSource =
|
|
45
|
+
const credentialsSource = this.resolveCredentialSubmissionOptions();
|
|
42
46
|
const maybeAppSpecificPasswordSource = 'appSpecificPasswordSource' in credentialsSource
|
|
43
47
|
? credentialsSource.appSpecificPasswordSource
|
|
44
48
|
: null;
|
|
45
49
|
const maybeAscApiKeySource = 'ascApiKeySource' in credentialsSource ? credentialsSource.ascApiKeySource : null;
|
|
50
|
+
const maybeCredentialsServiceSource = 'credentialsServiceSource' in credentialsSource
|
|
51
|
+
? credentialsSource.credentialsServiceSource
|
|
52
|
+
: null;
|
|
46
53
|
const ascAppIdentifier = await this.resolveAscAppIdentifierAsync();
|
|
47
|
-
const appleIdUsername = await this.resolveAppleIdUsernameAsync();
|
|
48
54
|
const errored = [
|
|
49
55
|
archiveSource,
|
|
50
56
|
...(maybeAppSpecificPasswordSource ? [maybeAppSpecificPasswordSource] : []),
|
|
51
57
|
...(maybeAscApiKeySource ? [maybeAscApiKeySource] : []),
|
|
58
|
+
...(maybeCredentialsServiceSource ? [maybeCredentialsServiceSource] : []),
|
|
52
59
|
ascAppIdentifier,
|
|
53
|
-
appleIdUsername,
|
|
54
60
|
].filter(r => !r.ok);
|
|
55
61
|
if (errored.length > 0) {
|
|
56
62
|
const message = errored.map(err => { var _a; return (_a = err.reason) === null || _a === void 0 ? void 0 : _a.message; }).join('\n');
|
|
@@ -59,7 +65,6 @@ class IosSubmitCommand {
|
|
|
59
65
|
}
|
|
60
66
|
return {
|
|
61
67
|
projectId: this.ctx.projectId,
|
|
62
|
-
appleIdUsername: appleIdUsername.enforceValue(),
|
|
63
68
|
ascAppIdentifier: ascAppIdentifier.enforceValue(),
|
|
64
69
|
archiveSource: archiveSource.enforceValue(),
|
|
65
70
|
...(maybeAppSpecificPasswordSource
|
|
@@ -72,6 +77,11 @@ class IosSubmitCommand {
|
|
|
72
77
|
ascApiKeySource: maybeAscApiKeySource.enforceValue(),
|
|
73
78
|
}
|
|
74
79
|
: null),
|
|
80
|
+
...(maybeCredentialsServiceSource
|
|
81
|
+
? {
|
|
82
|
+
credentialsServiceSource: maybeCredentialsServiceSource.enforceValue(),
|
|
83
|
+
}
|
|
84
|
+
: null),
|
|
75
85
|
};
|
|
76
86
|
}
|
|
77
87
|
resolveAppSpecificPasswordSource() {
|
|
@@ -82,14 +92,7 @@ class IosSubmitCommand {
|
|
|
82
92
|
appSpecificPassword: envAppSpecificPassword,
|
|
83
93
|
});
|
|
84
94
|
}
|
|
85
|
-
|
|
86
|
-
return (0, results_1.result)(new Error('Set the EXPO_APPLE_APP_SPECIFIC_PASSWORD environment variable.'));
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
return (0, results_1.result)({
|
|
90
|
-
sourceType: AppSpecificPasswordSource_1.AppSpecificPasswordSourceType.prompt,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
95
|
+
return (0, results_1.result)(new errors_1.MissingCredentialsError('The EXPO_APPLE_APP_SPECIFIC_PASSWORD environment variable must be set.'));
|
|
93
96
|
}
|
|
94
97
|
resolveAscApiKeySource() {
|
|
95
98
|
const { ascApiKeyPath, ascApiKeyIssuerId, ascApiKeyId } = this.ctx.profile;
|
|
@@ -140,37 +143,5 @@ class IosSubmitCommand {
|
|
|
140
143
|
}
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
|
-
async resolveAppleIdUsernameAsync() {
|
|
144
|
-
var _a;
|
|
145
|
-
if (this.ctx.profile.appleId) {
|
|
146
|
-
return (0, results_1.result)(this.ctx.profile.appleId);
|
|
147
|
-
}
|
|
148
|
-
const envAppleId = getenv_1.default.string('EXPO_APPLE_ID', '');
|
|
149
|
-
if (envAppleId) {
|
|
150
|
-
return (0, results_1.result)(envAppleId);
|
|
151
|
-
}
|
|
152
|
-
if ((_a = this.ctx.credentialsCtx.appStore.authCtx) === null || _a === void 0 ? void 0 : _a.appleId) {
|
|
153
|
-
return (0, results_1.result)(this.ctx.credentialsCtx.appStore.authCtx.appleId);
|
|
154
|
-
}
|
|
155
|
-
// Get the email address that was last used and set it as
|
|
156
|
-
// the default value for quicker authentication.
|
|
157
|
-
const lastAppleId = await UserSettings_1.default.getAsync('appleId', null);
|
|
158
|
-
if (this.ctx.nonInteractive) {
|
|
159
|
-
if (lastAppleId) {
|
|
160
|
-
return (0, results_1.result)(lastAppleId);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
return (0, results_1.result)(new Error('Set appleId in the submit profile (eas.json).'));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
const { appleId } = await (0, prompts_1.promptAsync)({
|
|
167
|
-
type: 'text',
|
|
168
|
-
name: 'appleId',
|
|
169
|
-
message: `Enter your Apple ID:`,
|
|
170
|
-
validate: (val) => !!val,
|
|
171
|
-
initial: lastAppleId !== null && lastAppleId !== void 0 ? lastAppleId : undefined,
|
|
172
|
-
});
|
|
173
|
-
return (0, results_1.result)(appleId);
|
|
174
|
-
}
|
|
175
146
|
}
|
|
176
147
|
exports.default = IosSubmitCommand;
|
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
import { Platform } from '@expo/eas-build-job';
|
|
2
2
|
import { IosSubmissionConfigInput, SubmissionFragment } from '../../graphql/generated';
|
|
3
|
-
import { ArchiveSource } from '../ArchiveSource';
|
|
3
|
+
import { Archive, ArchiveSource } from '../ArchiveSource';
|
|
4
4
|
import BaseSubmitter, { SubmissionInput } from '../BaseSubmitter';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { SubmissionContext } from '../context';
|
|
6
|
+
import { AppSpecificPasswordCredentials, AppSpecificPasswordSource } from './AppSpecificPasswordSource';
|
|
7
|
+
import { AscApiKeyResult, AscApiKeySource } from './AscApiKeySource';
|
|
8
|
+
import { CredentialsServiceSource } from './CredentialsServiceSource';
|
|
7
9
|
export interface IosSubmissionOptions extends Pick<IosSubmissionConfigInput, 'appleIdUsername' | 'ascAppIdentifier'> {
|
|
8
10
|
projectId: string;
|
|
9
11
|
archiveSource: ArchiveSource;
|
|
10
12
|
appSpecificPasswordSource?: AppSpecificPasswordSource;
|
|
11
13
|
ascApiKeySource?: AscApiKeySource;
|
|
14
|
+
credentialsServiceSource?: CredentialsServiceSource;
|
|
12
15
|
}
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
interface ResolvedSourceOptions {
|
|
17
|
+
archive: Archive;
|
|
18
|
+
credentials: {
|
|
19
|
+
appSpecificPassword?: AppSpecificPasswordCredentials;
|
|
20
|
+
ascApiKeyResult?: AscApiKeyResult;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export default class IosSubmitter extends BaseSubmitter<Platform.IOS, ResolvedSourceOptions, IosSubmissionOptions> {
|
|
24
|
+
constructor(ctx: SubmissionContext<Platform.IOS>, options: IosSubmissionOptions);
|
|
25
|
+
createSubmissionInputAsync(resolvedSourceOptions: ResolvedSourceOptions): Promise<SubmissionInput<Platform.IOS>>;
|
|
15
26
|
protected createPlatformSubmissionAsync({ projectId, submissionConfig, buildId, }: SubmissionInput<Platform.IOS>): Promise<SubmissionFragment>;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
27
|
+
private formatSubmissionConfig;
|
|
28
|
+
private formatAppSpecificPassword;
|
|
29
|
+
private formatAscApiKeyResult;
|
|
18
30
|
private prepareSummaryData;
|
|
19
31
|
}
|
|
32
|
+
export {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
|
|
5
|
+
const events_1 = require("../../analytics/events");
|
|
5
6
|
const SubmissionMutation_1 = require("../../graphql/mutations/SubmissionMutation");
|
|
6
7
|
const formatFields_1 = (0, tslib_1.__importDefault)(require("../../utils/formatFields"));
|
|
7
8
|
const ArchiveSource_1 = require("../ArchiveSource");
|
|
@@ -9,17 +10,53 @@ const BaseSubmitter_1 = (0, tslib_1.__importDefault)(require("../BaseSubmitter")
|
|
|
9
10
|
const summary_1 = require("../utils/summary");
|
|
10
11
|
const AppSpecificPasswordSource_1 = require("./AppSpecificPasswordSource");
|
|
11
12
|
const AscApiKeySource_1 = require("./AscApiKeySource");
|
|
13
|
+
const CredentialsServiceSource_1 = require("./CredentialsServiceSource");
|
|
12
14
|
class IosSubmitter extends BaseSubmitter_1.default {
|
|
13
|
-
|
|
15
|
+
constructor(ctx, options) {
|
|
16
|
+
const sourceOptionsResolver = {
|
|
17
|
+
// eslint-disable-next-line async-protect/async-suffix
|
|
18
|
+
archive: async () => await (0, ArchiveSource_1.getArchiveAsync)(this.options.archiveSource),
|
|
19
|
+
// eslint-disable-next-line async-protect/async-suffix
|
|
20
|
+
credentials: async () => {
|
|
21
|
+
const maybeAppSpecificPassword = this.options.appSpecificPasswordSource
|
|
22
|
+
? await (0, AppSpecificPasswordSource_1.getAppSpecificPasswordLocallyAsync)(this.ctx, this.options.appSpecificPasswordSource)
|
|
23
|
+
: null;
|
|
24
|
+
const maybeAppStoreConnectApiKey = this.options.ascApiKeySource
|
|
25
|
+
? await (0, AscApiKeySource_1.getAscApiKeyLocallyAsync)(this.ctx, this.options.ascApiKeySource)
|
|
26
|
+
: null;
|
|
27
|
+
const maybeAscOrAspFromCredentialsService = this.options.credentialsServiceSource
|
|
28
|
+
? await (0, CredentialsServiceSource_1.getFromCredentialsServiceAsync)(this.ctx)
|
|
29
|
+
: null;
|
|
30
|
+
return {
|
|
31
|
+
...(maybeAppSpecificPassword ? { appSpecificPassword: maybeAppSpecificPassword } : null),
|
|
32
|
+
...(maybeAppStoreConnectApiKey ? { ascApiKeyResult: maybeAppStoreConnectApiKey } : null),
|
|
33
|
+
...(maybeAscOrAspFromCredentialsService ? maybeAscOrAspFromCredentialsService : null),
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
const sourceOptionsAnalytics = {
|
|
38
|
+
archive: {
|
|
39
|
+
attemptEvent: events_1.SubmissionEvent.GATHER_ARCHIVE_ATTEMPT,
|
|
40
|
+
successEvent: events_1.SubmissionEvent.GATHER_ARCHIVE_SUCCESS,
|
|
41
|
+
failureEvent: events_1.SubmissionEvent.GATHER_ARCHIVE_FAIL,
|
|
42
|
+
},
|
|
43
|
+
credentials: {
|
|
44
|
+
attemptEvent: events_1.SubmissionEvent.GATHER_CREDENTIALS_ATTEMPT,
|
|
45
|
+
successEvent: events_1.SubmissionEvent.GATHER_CREDENTIALS_SUCCESS,
|
|
46
|
+
failureEvent: events_1.SubmissionEvent.GATHER_CREDENTIALS_FAIL,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
super(ctx, options, sourceOptionsResolver, sourceOptionsAnalytics);
|
|
50
|
+
}
|
|
51
|
+
async createSubmissionInputAsync(resolvedSourceOptions) {
|
|
14
52
|
var _a;
|
|
15
|
-
const
|
|
16
|
-
const submissionConfig = await this.formatSubmissionConfigAsync(this.options, resolvedSourceOptions);
|
|
53
|
+
const submissionConfig = this.formatSubmissionConfig(this.options, resolvedSourceOptions);
|
|
17
54
|
(0, summary_1.printSummary)(this.prepareSummaryData(this.options, resolvedSourceOptions), SummaryHumanReadableKeys);
|
|
18
|
-
return
|
|
55
|
+
return {
|
|
19
56
|
projectId: this.options.projectId,
|
|
20
57
|
submissionConfig,
|
|
21
58
|
buildId: (_a = resolvedSourceOptions.archive.build) === null || _a === void 0 ? void 0 : _a.id,
|
|
22
|
-
}
|
|
59
|
+
};
|
|
23
60
|
}
|
|
24
61
|
async createPlatformSubmissionAsync({ projectId, submissionConfig, buildId, }) {
|
|
25
62
|
return await SubmissionMutation_1.SubmissionMutation.createIosSubmissionAsync({
|
|
@@ -28,48 +65,43 @@ class IosSubmitter extends BaseSubmitter_1.default {
|
|
|
28
65
|
submittedBuildId: buildId,
|
|
29
66
|
});
|
|
30
67
|
}
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const maybeAppSpecificPassword = this.options.appSpecificPasswordSource
|
|
34
|
-
? await (0, AppSpecificPasswordSource_1.getAppSpecificPasswordAsync)(this.options.appSpecificPasswordSource)
|
|
35
|
-
: null;
|
|
36
|
-
const maybeAppStoreConnectApiKey = this.options.ascApiKeySource
|
|
37
|
-
? await (0, AscApiKeySource_1.getAscApiKeyLocallyAsync)(this.options.ascApiKeySource)
|
|
38
|
-
: null;
|
|
39
|
-
return {
|
|
40
|
-
archive,
|
|
41
|
-
...(maybeAppSpecificPassword ? { appSpecificPassword: maybeAppSpecificPassword } : null),
|
|
42
|
-
...(maybeAppStoreConnectApiKey ? { ascApiKeyResult: maybeAppStoreConnectApiKey } : null),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
async formatSubmissionConfigAsync(options, { archive, appSpecificPassword, ascApiKeyResult }) {
|
|
68
|
+
formatSubmissionConfig(options, { archive, credentials }) {
|
|
69
|
+
const { appSpecificPassword, ascApiKeyResult } = credentials;
|
|
46
70
|
const { appleIdUsername, ascAppIdentifier } = options;
|
|
47
71
|
return {
|
|
48
72
|
ascAppIdentifier,
|
|
49
73
|
appleIdUsername,
|
|
50
74
|
archiveUrl: archive.url,
|
|
51
|
-
|
|
52
|
-
...((ascApiKeyResult === null || ascApiKeyResult === void 0 ? void 0 : ascApiKeyResult.result)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
: null),
|
|
75
|
+
...(appSpecificPassword ? this.formatAppSpecificPassword(appSpecificPassword) : null),
|
|
76
|
+
...((ascApiKeyResult === null || ascApiKeyResult === void 0 ? void 0 : ascApiKeyResult.result) ? this.formatAscApiKeyResult(ascApiKeyResult.result) : null),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
formatAppSpecificPassword(appSpecificPassword) {
|
|
80
|
+
return {
|
|
81
|
+
appleAppSpecificPassword: appSpecificPassword.password,
|
|
82
|
+
appleIdUsername: appSpecificPassword.appleIdUsername,
|
|
61
83
|
};
|
|
62
84
|
}
|
|
63
|
-
|
|
64
|
-
|
|
85
|
+
formatAscApiKeyResult(result) {
|
|
86
|
+
return 'ascApiKeyId' in result
|
|
87
|
+
? { ascApiKeyId: result.ascApiKeyId }
|
|
88
|
+
: {
|
|
89
|
+
ascApiKey: {
|
|
90
|
+
keyP8: result.keyP8,
|
|
91
|
+
keyIdentifier: result.keyId,
|
|
92
|
+
issuerIdentifier: result.issuerId,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
prepareSummaryData(options, { archive, credentials }) {
|
|
97
|
+
const { ascApiKeyResult, appSpecificPassword } = credentials;
|
|
98
|
+
const { ascAppIdentifier, projectId } = options;
|
|
65
99
|
// structuring order affects table rows order
|
|
66
100
|
return {
|
|
67
101
|
ascAppIdentifier,
|
|
68
|
-
appleIdUsername: appleIdUsername !== null && appleIdUsername !== void 0 ? appleIdUsername : undefined,
|
|
69
102
|
projectId,
|
|
70
|
-
...(
|
|
71
|
-
|
|
72
|
-
: null),
|
|
103
|
+
...(appSpecificPassword ? { appleIdUsername: appSpecificPassword.appleIdUsername } : null),
|
|
104
|
+
...(ascApiKeyResult ? { formattedAscApiKey: formatAscApiKeySummary(ascApiKeyResult) } : null),
|
|
73
105
|
...(0, summary_1.formatArchiveSourceSummary)(archive),
|
|
74
106
|
};
|
|
75
107
|
}
|
|
@@ -82,11 +114,19 @@ const SummaryHumanReadableKeys = {
|
|
|
82
114
|
archiveUrl: 'Archive URL',
|
|
83
115
|
archivePath: 'Archive Path',
|
|
84
116
|
formattedBuild: 'Build',
|
|
85
|
-
formattedAscApiKey: 'App Store Connect
|
|
117
|
+
formattedAscApiKey: 'App Store Connect API Key',
|
|
86
118
|
};
|
|
87
|
-
function
|
|
88
|
-
const { source, path, keyId } = summary;
|
|
119
|
+
function formatAscApiKeySummary({ summary }) {
|
|
120
|
+
const { source, path, keyId, name } = summary;
|
|
89
121
|
const fields = [
|
|
122
|
+
{
|
|
123
|
+
label: 'Key Name',
|
|
124
|
+
value: name,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
label: 'Key ID',
|
|
128
|
+
value: keyId,
|
|
129
|
+
},
|
|
90
130
|
{
|
|
91
131
|
label: 'Key Source',
|
|
92
132
|
value: source,
|
|
@@ -95,10 +135,6 @@ function formatServiceAccountSummary({ summary }) {
|
|
|
95
135
|
label: 'Key Path',
|
|
96
136
|
value: path,
|
|
97
137
|
},
|
|
98
|
-
{
|
|
99
|
-
label: 'Key ID',
|
|
100
|
-
value: keyId,
|
|
101
|
-
},
|
|
102
138
|
];
|
|
103
139
|
const filteredFields = fields.filter(({ value }) => value !== undefined && value !== null);
|
|
104
140
|
return ('\n' +
|
package/build/submit/submit.js
CHANGED
|
@@ -4,6 +4,8 @@ exports.waitToCompleteAsync = exports.submitAsync = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
6
6
|
const chalk_1 = (0, tslib_1.__importDefault)(require("chalk"));
|
|
7
|
+
const common_1 = require("../analytics/common");
|
|
8
|
+
const events_1 = require("../analytics/events");
|
|
7
9
|
const generated_1 = require("../graphql/generated");
|
|
8
10
|
const log_1 = (0, tslib_1.__importStar)(require("../log"));
|
|
9
11
|
const platform_1 = require("../platform");
|
|
@@ -12,10 +14,17 @@ const IosSubmitCommand_1 = (0, tslib_1.__importDefault)(require("./ios/IosSubmit
|
|
|
12
14
|
const logs_1 = require("./utils/logs");
|
|
13
15
|
const wait_1 = require("./utils/wait");
|
|
14
16
|
async function submitAsync(ctx) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
return await (0, common_1.withAnalyticsAsync)(async () => {
|
|
18
|
+
const command = ctx.platform === eas_build_job_1.Platform.ANDROID
|
|
19
|
+
? new AndroidSubmitCommand_1.default(ctx)
|
|
20
|
+
: new IosSubmitCommand_1.default(ctx);
|
|
21
|
+
return command.runAsync();
|
|
22
|
+
}, {
|
|
23
|
+
attemptEvent: events_1.SubmissionEvent.SUBMIT_COMMAND_ATTEMPT,
|
|
24
|
+
successEvent: events_1.SubmissionEvent.SUBMIT_COMMAND_SUCCESS,
|
|
25
|
+
failureEvent: events_1.SubmissionEvent.SUBMIT_COMMAND_FAIL,
|
|
26
|
+
trackingCtx: ctx.trackingCtx,
|
|
27
|
+
});
|
|
19
28
|
}
|
|
20
29
|
exports.submitAsync = submitAsync;
|
|
21
30
|
async function waitToCompleteAsync(submissions, { verbose = false } = {}) {
|
|
@@ -19,6 +19,7 @@ var SubmissionErrorCode;
|
|
|
19
19
|
SubmissionErrorCode["IOS_INVALID_SIGNATURE"] = "SUBMISSION_SERVICE_IOS_INVALID_SIGNATURE";
|
|
20
20
|
SubmissionErrorCode["IOS_INCORRECT_CREDENTIALS"] = "SUBMISSION_SERVICE_IOS_INVALID_CREDENTIALS";
|
|
21
21
|
SubmissionErrorCode["IOS_IPAD_INVALID_ORIENTATION"] = "SUBMISSION_SERVICE_IOS_IPAD_INVALID_ORIENTATION";
|
|
22
|
+
SubmissionErrorCode["IOS_APPLE_MAINTENANCE"] = "SUBMISSION_SERVICE_IOS_APPLE_MAINTENANCE";
|
|
22
23
|
})(SubmissionErrorCode || (SubmissionErrorCode = {}));
|
|
23
24
|
const SubmissionErrorMessages = {
|
|
24
25
|
[SubmissionErrorCode.ARCHIVE_DOWNLOAD_NOT_FOUND_ERROR]: "Failed to download the archive file (Response code: 404 Not Found). Please make sure the URL you've provided is correct.",
|
|
@@ -50,6 +51,7 @@ const SubmissionErrorMessages = {
|
|
|
50
51
|
[SubmissionErrorCode.IOS_IPAD_INVALID_ORIENTATION]: "Your app doesn't support iPad multitasking and has to require full screen.\n" +
|
|
51
52
|
"If you're submitting a managed Expo project, set the `expo.ios.requireFullScreen` to true in app.json and build the project again.\n" +
|
|
52
53
|
`${(0, log_1.learnMore)('https://expo.fyi/ipad-requires-fullscreen')}`,
|
|
54
|
+
[SubmissionErrorCode.IOS_APPLE_MAINTENANCE]: 'It looks like Apple servers are undergoing an unscheduled maintenance. Please try again later.',
|
|
53
55
|
};
|
|
54
56
|
function printSubmissionError(error) {
|
|
55
57
|
if (error.errorCode &&
|
package/build/user/User.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.logoutAsync = exports.loginAsync = exports.getUserAsync = exports.getActorDisplayName = exports.getAccessToken = exports.getSessionSecret = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const graphql_tag_1 = (0, tslib_1.__importDefault)(require("graphql-tag"));
|
|
6
|
-
const Analytics = (0, tslib_1.__importStar)(require("../analytics"));
|
|
6
|
+
const Analytics = (0, tslib_1.__importStar)(require("../analytics/rudderstackClient"));
|
|
7
7
|
const api_1 = require("../api");
|
|
8
8
|
const client_1 = require("../graphql/client");
|
|
9
9
|
const UserQuery_1 = require("../graphql/queries/UserQuery");
|
package/oclif.manifest.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"0.34.0","commands":{"analytics":{"id":"analytics","description":"view or change analytics settings","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"show the eas.json config","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","options":["android","ios"]},"profile":{"name":"profile","type":"option"}},"args":[]},"credentials":{"id":"credentials","description":"manage your credentials","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"log environment info to the console","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit build archive to app store\nSee how to configure submits with eas.json: https://docs.expo.dev/submit/eas-json/","pluginName":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json."},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false},"id":{"name":"id","type":"option","description":"ID of the build to submit"},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file"},"url":{"name":"url","type":"option","description":"App archive url"},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[]},"account:login":{"id":"account:login","description":"log in with your Expo account","pluginName":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","pluginName":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","pluginName":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"Create a branch on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}]},"branch:delete":{"id":"branch:delete","description":"Republish an update group","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}]},"branch:list":{"id":"branch:list","description":"List all branches on this project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[]},"branch:publish":{"id":"branch:publish","description":"Publish an update group to a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"message":{"name":"message","type":"option","description":"short message describing the updates.","required":false},"republish":{"name":"republish","type":"boolean","description":"republish an update group","allowNo":false},"group":{"name":"group","type":"option","description":"update group to republish"},"input-dir":{"name":"input-dir","type":"option","description":"location of the bundle","required":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","description":"only publish to a single platform","required":false,"helpValue":"(android|ios|all)","options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"return a json with the new update group.","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"use the current git branch and commit message for the EAS branch and update message","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to publish on"}]},"branch:rename":{"id":"branch:rename","description":"Rename a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[]},"branch:view":{"id":"branch:view","description":"View a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}]},"build:cancel":{"id":"build:cancel","description":"Cancel a build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"Configure the project to support EAS Build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","options":["android","ios","all"]}},"args":[]},"build":{"id":"build","description":"start a build","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","description":"Skip project configuration","allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME"},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME"}},"args":[]},"build:list":{"id":"build:list","description":"list all builds for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option"},"appVersion":{"name":"appVersion","type":"option"},"appBuildVersion":{"name":"appBuildVersion","type":"option"},"sdkVersion":{"name":"sdkVersion","type":"option"},"runtimeVersion":{"name":"runtimeVersion","type":"option"},"appIdentifier":{"name":"appIdentifier","type":"option"},"buildProfile":{"name":"buildProfile","type":"option"},"gitCommitHash":{"name":"gitCommitHash","type":"option"},"limit":{"name":"limit","type":"option"}},"args":[]},"build:view":{"id":"build:view","description":"view a build for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}]},"channel:create":{"id":"channel:create","description":"Create a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}]},"channel:edit":{"id":"channel:edit","description":"Point a channel at a new branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to"},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}]},"channel:list":{"id":"channel:list","description":"List all channels on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[]},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}]},"channel:view":{"id":"channel:view","description":"View a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}]},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:list":{"id":"device:list","description":"list all registered devices for your account","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option"}},"args":[]},"device:view":{"id":"device:view","description":"view a device for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","pluginName":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"Create an environment secret on the current project or owner account.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret"},"value":{"name":"value","type":"option","description":"Value of the secret"},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[]},"secret:delete":{"id":"secret:delete","description":"Delete an environment secret by ID.\nUnsure where to find the secret's ID? Run eas secrets:list","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete"}},"args":[]},"secret:list":{"id":"secret:list","description":"Lists environment secrets available for your current app","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:delete":{"id":"update:delete","description":"Delete all the updates in an update Group.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}]},"update:view":{"id":"update:view","description":"Update group details.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}]},"webhook:create":{"id":"webhook:create","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:delete":{"id":"webhook:delete","description":"Delete a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"List webhooks on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"]}},"args":[]},"webhook:update":{"id":"webhook:update","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:view":{"id":"webhook:view","description":"View a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
|
|
1
|
+
{"version":"0.36.1","commands":{"analytics":{"id":"analytics","description":"view or change analytics settings","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"show the eas.json config","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","options":["android","ios"]},"profile":{"name":"profile","type":"option"}},"args":[]},"credentials":{"id":"credentials","description":"manage your credentials","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"log environment info to the console","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit build archive to app store\nSee how to configure submits with eas.json: https://docs.expo.dev/submit/eas-json/","pluginName":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json."},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false},"id":{"name":"id","type":"option","description":"ID of the build to submit"},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file"},"url":{"name":"url","type":"option","description":"App archive url"},"verbose":{"name":"verbose","type":"boolean","description":"Always print logs from Submission Service","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for submission to complete","allowNo":true},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[]},"account:login":{"id":"account:login","description":"log in with your Expo account","pluginName":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","pluginName":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","pluginName":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"Create a branch on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the new branch ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to create","required":false}]},"branch:delete":{"id":"branch:delete","description":"Republish an update group","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return JSON with the edited branch's ID and name.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to delete","required":false}]},"branch:list":{"id":"branch:list","description":"List all branches on this project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[]},"branch:publish":{"id":"branch:publish","description":"Publish an update group to a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"message":{"name":"message","type":"option","description":"short message describing the updates.","required":false},"republish":{"name":"republish","type":"boolean","description":"republish an update group","allowNo":false},"group":{"name":"group","type":"option","description":"update group to republish"},"input-dir":{"name":"input-dir","type":"option","description":"location of the bundle","required":false,"default":"dist"},"skip-bundler":{"name":"skip-bundler","type":"boolean","description":"skip running Expo CLI to bundle the app before publishing","allowNo":false},"platform":{"name":"platform","type":"option","char":"p","description":"only publish to a single platform","required":false,"helpValue":"(android|ios|all)","options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"return a json with the new update group.","allowNo":false},"auto":{"name":"auto","type":"boolean","description":"use the current git branch and commit message for the EAS branch and update message","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to publish on"}]},"branch:rename":{"id":"branch:rename","description":"Rename a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[]},"branch:view":{"id":"branch:view","description":"View a branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return a json with the branch's ID name and recent update groups.","allowNo":false}},"args":[{"name":"name","description":"Name of the branch to view","required":false}]},"build:cancel":{"id":"build:cancel","description":"Cancel a build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"Configure the project to support EAS Build.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","options":["android","ios","all"]}},"args":[]},"build":{"id":"build","description":"start a build","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","options":["android","ios","all"]},"skip-credentials-check":{"name":"skip-credentials-check","type":"boolean","hidden":true,"allowNo":false},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"skip-project-configuration":{"name":"skip-project-configuration","type":"boolean","description":"Skip project configuration","allowNo":false},"profile":{"name":"profile","type":"option","description":"Name of the build profile from eas.json. Defaults to \"production\" if defined in eas.json.","helpValue":"PROFILE_NAME"},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false},"local":{"name":"local","type":"boolean","description":"Run build locally [experimental]","allowNo":false},"wait":{"name":"wait","type":"boolean","description":"Wait for build(s) to complete","allowNo":true},"clear-cache":{"name":"clear-cache","type":"boolean","description":"Clear cache before the build","allowNo":false},"auto-submit":{"name":"auto-submit","type":"boolean","description":"Submit on build complete using the submit profile with the same name as the build profile","allowNo":false},"auto-submit-with-profile":{"name":"auto-submit-with-profile","type":"option","description":"Submit on build complete using the submit profile with provided name","helpValue":"PROFILE_NAME"}},"args":[]},"build:list":{"id":"build:list","description":"list all builds for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","options":["all","android","ios"]},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false},"status":{"name":"status","type":"option","helpValue":"(new|in-queue|in-progress|errored|finished|canceled)","options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option"},"appVersion":{"name":"appVersion","type":"option"},"appBuildVersion":{"name":"appBuildVersion","type":"option"},"sdkVersion":{"name":"sdkVersion","type":"option"},"runtimeVersion":{"name":"runtimeVersion","type":"option"},"appIdentifier":{"name":"appIdentifier","type":"option"},"buildProfile":{"name":"buildProfile","type":"option"},"gitCommitHash":{"name":"gitCommitHash","type":"option"},"limit":{"name":"limit","type":"option"}},"args":[]},"build:view":{"id":"build:view","description":"view a build for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","allowNo":false}},"args":[{"name":"BUILD_ID"}]},"channel:create":{"id":"channel:create","description":"Create a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to create","required":false}]},"channel:edit":{"id":"channel:edit","description":"Point a channel at a new branch.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to"},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to edit","required":false}]},"channel:list":{"id":"channel:list","description":"List all channels on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[]},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false},"end":{"name":"end","type":"boolean","description":"end the rollout","allowNo":false},"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the new channel ID, name and branch mapping","allowNo":false}},"args":[{"name":"channel","description":"rollout that the channel is on","required":true}]},"channel:view":{"id":"channel:view","description":"View a channel on the current project.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object with the channel ID, name and branch mapping.","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to view","required":false}]},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:list":{"id":"device:list","description":"list all registered devices for your account","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option"}},"args":[]},"device:view":{"id":"device:view","description":"view a device for your project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"project:info":{"id":"project:info","description":"information about the current project","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","pluginName":"eas-cli","pluginType":"core","aliases":["init"],"flags":{},"args":[]},"secret:create":{"id":"secret:create","description":"Create an environment secret on the current project or owner account.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret"},"value":{"name":"value","type":"option","description":"Value of the secret"},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[]},"secret:delete":{"id":"secret:delete","description":"Delete an environment secret by ID.\nUnsure where to find the secret's ID? Run eas secret:list","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete"}},"args":[]},"secret:list":{"id":"secret:list","description":"Lists environment secrets available for your current app","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:delete":{"id":"update:delete","description":"Delete all the updates in an update Group.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the group ID of the deleted updates.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group to delete.","required":true}]},"update:view":{"id":"update:view","description":"Update group details.","pluginName":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"Return a json with the updates belonging to the group.","allowNo":false}},"args":[{"name":"groupId","description":"The ID of an update group.","required":true}]},"webhook:create":{"id":"webhook:create","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:delete":{"id":"webhook:delete","description":"Delete a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to delete","required":false}]},"webhook:list":{"id":"webhook:list","description":"List webhooks on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"]}},"args":[]},"webhook:update":{"id":"webhook:update","description":"Create a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD)","options":["BUILD"],"default":"BUILD"},"url":{"name":"url","type":"option","description":"Webhook URL"},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header."}},"args":[]},"webhook:view":{"id":"webhook:view","description":"View a webhook on the current project.","pluginName":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
|