eas-cli 0.54.0 → 0.55.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.
Files changed (48) hide show
  1. package/README.md +44 -96
  2. package/build/build/android/build.js +2 -1
  3. package/build/build/build.d.ts +2 -2
  4. package/build/build/build.js +9 -3
  5. package/build/build/context.d.ts +2 -0
  6. package/build/build/createContext.d.ts +3 -1
  7. package/build/build/createContext.js +2 -1
  8. package/build/build/ios/build.js +2 -1
  9. package/build/build/runBuildAndSubmit.d.ts +2 -0
  10. package/build/build/runBuildAndSubmit.js +15 -2
  11. package/build/build/types.d.ts +4 -0
  12. package/build/build/types.js +6 -1
  13. package/build/commands/build/index.d.ts +2 -0
  14. package/build/commands/build/index.js +8 -1
  15. package/build/commands/metadata/push.js +5 -3
  16. package/build/commands/update/index.d.ts +1 -0
  17. package/build/commands/update/index.js +12 -3
  18. package/build/env.d.ts +11 -0
  19. package/build/env.js +12 -0
  20. package/build/graphql/generated.d.ts +15 -0
  21. package/build/graphql/generated.js +9 -1
  22. package/build/graphql/mutations/BuildMutation.d.ts +3 -1
  23. package/build/graphql/mutations/BuildMutation.js +14 -2
  24. package/build/graphql/queries/WebhookQuery.d.ts +1 -1
  25. package/build/metadata/apple/config/reader.d.ts +2 -1
  26. package/build/metadata/apple/config/reader.js +66 -9
  27. package/build/metadata/apple/config/writer.d.ts +3 -2
  28. package/build/metadata/apple/config/writer.js +64 -12
  29. package/build/metadata/apple/data.d.ts +2 -1
  30. package/build/metadata/apple/tasks/app-review-detail.d.ts +14 -0
  31. package/build/metadata/apple/tasks/app-review-detail.js +49 -0
  32. package/build/metadata/apple/tasks/app-version.js +2 -2
  33. package/build/metadata/apple/tasks/index.js +2 -1
  34. package/build/metadata/apple/types.d.ts +9 -11
  35. package/build/metadata/errors.d.ts +5 -0
  36. package/build/metadata/errors.js +24 -7
  37. package/build/metadata/upload.d.ts +3 -1
  38. package/build/metadata/upload.js +14 -3
  39. package/build/project/android/applicationId.js +4 -0
  40. package/build/project/publish.js +8 -3
  41. package/build/project/workflow.js +13 -11
  42. package/build/submit/utils/files.d.ts +6 -0
  43. package/build/submit/utils/files.js +16 -3
  44. package/build/uploads.d.ts +3 -2
  45. package/build/uploads.js +4 -5
  46. package/oclif.manifest.json +1 -1
  47. package/package.json +6 -5
  48. package/schema/metadata-0.json +988 -0
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppReviewDetailTask = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const assert_1 = tslib_1.__importDefault(require("assert"));
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const log_1 = tslib_1.__importDefault(require("../../../log"));
8
+ const log_2 = require("../../utils/log");
9
+ const task_1 = require("../task");
10
+ /** Handle all contact, demo account, or instruction info that are required for the App Store review team. */
11
+ class AppReviewDetailTask extends task_1.AppleTask {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.name = () => 'app review detail';
15
+ }
16
+ async prepareAsync({ context }) {
17
+ var _a;
18
+ (0, assert_1.default)(context.version, `App version not initialized, can't download store review details`);
19
+ context.reviewDetail = (_a = (await context.version.getAppStoreReviewDetailAsync())) !== null && _a !== void 0 ? _a : undefined;
20
+ }
21
+ async downloadAsync({ config, context }) {
22
+ if (context.reviewDetail) {
23
+ config.setReviewDetails(context.reviewDetail.attributes);
24
+ }
25
+ }
26
+ async uploadAsync({ config, context }) {
27
+ const reviewDetail = config.getReviewDetails();
28
+ if (!reviewDetail) {
29
+ return log_1.default.log((0, chalk_1.default) `{dim - Skipped store review details, not configured}`);
30
+ }
31
+ (0, assert_1.default)(context.version, `App version not initialized, can't upload store review details`);
32
+ const { versionString } = context.version.attributes;
33
+ if (!context.reviewDetail) {
34
+ // We can't set the demo required property when creating, omit it from the request
35
+ const { demoAccountRequired, ...reviewDetailsToCreate } = reviewDetail;
36
+ context.reviewDetail = await (0, log_2.logAsync)(() => context.version.createReviewDetailAsync(reviewDetailsToCreate), {
37
+ pending: `Creating store review details for ${chalk_1.default.bold(versionString)}...`,
38
+ success: `Created store review details for ${chalk_1.default.bold(versionString)}`,
39
+ failure: `Failed creating store review details for ${chalk_1.default.bold(versionString)}`,
40
+ });
41
+ }
42
+ context.reviewDetail = await (0, log_2.logAsync)(() => context.reviewDetail.updateAsync(reviewDetail), {
43
+ pending: `Updating store review details for ${chalk_1.default.bold(versionString)}...`,
44
+ success: `Updated store review details for ${chalk_1.default.bold(versionString)}`,
45
+ failure: `Failed updating store review details for ${chalk_1.default.bold(versionString)}`,
46
+ });
47
+ }
48
+ }
49
+ exports.AppReviewDetailTask = AppReviewDetailTask;
@@ -49,8 +49,8 @@ class AppVersionTask extends task_1.AppleTask {
49
49
  .join(' and ');
50
50
  context.version = await (0, log_2.logAsync)(() => context.version.updateAsync({ ...version, ...release }), {
51
51
  pending: `Updating ${description} info for ${chalk_1.default.bold(versionString)}...`,
52
- success: `Updated ${description} info for ${chalk_1.default.bold(versionString)}...`,
53
- failure: `Failed updating ${description} info for ${chalk_1.default.bold(versionString)}...`,
52
+ success: `Updated ${description} info for ${chalk_1.default.bold(versionString)}`,
53
+ failure: `Failed updating ${description} info for ${chalk_1.default.bold(versionString)}`,
54
54
  });
55
55
  }
56
56
  const locales = config.getLocales();
@@ -3,11 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createAppleTasks = void 0;
4
4
  const age_rating_1 = require("./age-rating");
5
5
  const app_info_1 = require("./app-info");
6
+ const app_review_detail_1 = require("./app-review-detail");
6
7
  const app_version_1 = require("./app-version");
7
8
  /**
8
9
  * List of all eligible tasks to sync local store configuration to the App store.
9
10
  */
10
11
  function createAppleTasks(_ctx) {
11
- return [new app_version_1.AppVersionTask(), new app_info_1.AppInfoTask(), new age_rating_1.AgeRatingTask()];
12
+ return [new app_version_1.AppVersionTask(), new app_info_1.AppInfoTask(), new age_rating_1.AgeRatingTask(), new app_review_detail_1.AppReviewDetailTask()];
12
13
  }
13
14
  exports.createAppleTasks = createAppleTasks;
@@ -1,20 +1,18 @@
1
1
  /// <reference types="@expo/apple-utils/ts-declarations/expo__app-store" />
2
- import type { AgeRatingDeclarationProps, AppCategoryId, AppSubcategoryId } from '@expo/apple-utils';
2
+ import type { AgeRatingDeclarationProps } from '@expo/apple-utils';
3
3
  export declare type AppleLocale = string;
4
4
  export interface AppleMetadata {
5
5
  copyright?: string;
6
6
  info?: Record<AppleLocale, AppleInfo>;
7
- categories?: AppCategoryId[] | AppleCategory;
7
+ categories?: AppleCategory;
8
8
  release?: AppleRelease;
9
9
  advisory?: AppleAdvisory;
10
10
  preview?: Record<string, string[]>;
11
11
  review?: AppleReview;
12
12
  }
13
13
  export declare type AppleAdvisory = Partial<AgeRatingDeclarationProps>;
14
- export interface AppleCategory {
15
- category: AppCategoryId;
16
- subcategory?: AppSubcategoryId[];
17
- }
14
+ /** Apps can define up to two categories, or categories with up to two subcategories */
15
+ export declare type AppleCategory = (string | string[])[];
18
16
  export interface AppleRelease {
19
17
  isPhasedReleaseEnabled?: boolean;
20
18
  shouldResetRatings?: boolean;
@@ -39,12 +37,12 @@ export interface AppleInfo {
39
37
  supportUrl?: string;
40
38
  }
41
39
  export interface AppleReview {
42
- firstName?: string;
43
- lastName?: string;
44
- phone?: string;
45
- email?: string;
40
+ firstName: string;
41
+ lastName: string;
42
+ phone: string;
43
+ email: string;
46
44
  demoUsername?: string;
47
45
  demoPassword?: string;
46
+ demoRequired?: boolean;
48
47
  notes?: string;
49
- attachment?: string;
50
48
  }
@@ -30,6 +30,11 @@ export declare class MetadataDownloadError extends Error {
30
30
  readonly executionId: string;
31
31
  constructor(errors: Error[], executionId: string);
32
32
  }
33
+ /**
34
+ * Log the encountered metadata validation error in detail for the user.
35
+ * This should help communicate any possible configuration error and help the user resolve it.
36
+ */
37
+ export declare function logMetadataValidationError(error: MetadataValidationError): void;
33
38
  /**
34
39
  * Handle a thrown metadata error by informing the user what went wrong.
35
40
  * If a normal error is thrown, this method will re-throw that error to avoid consuming it.
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleMetadataError = exports.MetadataDownloadError = exports.MetadataUploadError = exports.MetadataValidationError = void 0;
3
+ exports.handleMetadataError = exports.logMetadataValidationError = exports.MetadataDownloadError = exports.MetadataUploadError = exports.MetadataValidationError = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
5
6
  const log_1 = tslib_1.__importStar(require("../log"));
6
7
  /**
7
8
  * Before syncing data to the ASC API, we need to validate the metadata config.
@@ -43,6 +44,20 @@ class MetadataDownloadError extends Error {
43
44
  }
44
45
  }
45
46
  exports.MetadataDownloadError = MetadataDownloadError;
47
+ /**
48
+ * Log the encountered metadata validation error in detail for the user.
49
+ * This should help communicate any possible configuration error and help the user resolve it.
50
+ */
51
+ function logMetadataValidationError(error) {
52
+ var _a;
53
+ log_1.default.newLine();
54
+ log_1.default.error(chalk_1.default.bold(error.message));
55
+ if (((_a = error.errors) === null || _a === void 0 ? void 0 : _a.length) > 0) {
56
+ // TODO(cedric): group errors by property to make multiple errors for same property more readable
57
+ log_1.default.log(error.errors.map(err => ` - ${chalk_1.default.bold(err.dataPath)} ${err.message}`).join('\n'));
58
+ }
59
+ }
60
+ exports.logMetadataValidationError = logMetadataValidationError;
46
61
  /**
47
62
  * Handle a thrown metadata error by informing the user what went wrong.
48
63
  * If a normal error is thrown, this method will re-throw that error to avoid consuming it.
@@ -50,14 +65,16 @@ exports.MetadataDownloadError = MetadataDownloadError;
50
65
  function handleMetadataError(error) {
51
66
  var _a;
52
67
  if (error instanceof MetadataValidationError) {
53
- log_1.default.error(error.message);
54
- if (((_a = error.errors) === null || _a === void 0 ? void 0 : _a.length) > 0) {
55
- log_1.default.log(error.errors.map(err => ` - ${err.dataPath} ${err.message}`).join('\n'));
56
- }
57
- return;
68
+ return logMetadataValidationError(error);
58
69
  }
59
70
  if (error instanceof MetadataDownloadError || error instanceof MetadataUploadError) {
60
- log_1.default.error(error.message);
71
+ log_1.default.newLine();
72
+ log_1.default.error(chalk_1.default.bold(error.message));
73
+ if (((_a = error.errors) === null || _a === void 0 ? void 0 : _a.length) > 0) {
74
+ log_1.default.newLine();
75
+ log_1.default.error(error.errors.map(err => err.message).join('\n\n'));
76
+ }
77
+ log_1.default.newLine();
61
78
  log_1.default.log('Please check the logs for any configuration issues.');
62
79
  log_1.default.log('If this issue persists, please open a new issue at:');
63
80
  // TODO: add execution ID to the issue template link
@@ -3,4 +3,6 @@ import { MetadataContext } from './context';
3
3
  * Sync a local store configuration with the stores.
4
4
  * Note, only App Store is supported at this time.
5
5
  */
6
- export declare function uploadMetadataAsync(metadataCtx: MetadataContext): Promise<void>;
6
+ export declare function uploadMetadataAsync(metadataCtx: MetadataContext): Promise<{
7
+ appleLink: string;
8
+ }>;
@@ -6,6 +6,7 @@ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
6
6
  const path_1 = tslib_1.__importDefault(require("path"));
7
7
  const events_1 = require("../analytics/events");
8
8
  const log_1 = tslib_1.__importDefault(require("../log"));
9
+ const prompts_1 = require("../prompts");
9
10
  const tasks_1 = require("./apple/tasks");
10
11
  const config_1 = require("./config");
11
12
  const context_1 = require("./context");
@@ -20,13 +21,22 @@ async function uploadMetadataAsync(metadataCtx) {
20
21
  if (!(await fs_extra_1.default.pathExists(filePath))) {
21
22
  throw new errors_1.MetadataValidationError(`Store configuration file not found "${filePath}"`);
22
23
  }
23
- const { app, auth } = await (0, context_1.ensureMetadataAppStoreAuthenticatedAsync)(metadataCtx);
24
- const { unsubscribeTelemetry, executionId } = (0, telemetry_1.subscribeTelemetry)(events_1.MetadataEvent.APPLE_METADATA_UPLOAD, { app, auth });
25
24
  const fileData = await fs_extra_1.default.readJson(filePath);
26
25
  const { valid, errors: validationErrors } = (0, config_1.validateConfig)(fileData);
27
26
  if (!valid) {
28
- throw new errors_1.MetadataValidationError(`Store configuration errors found`, validationErrors);
27
+ const error = new errors_1.MetadataValidationError(`Store configuration errors found`, validationErrors);
28
+ (0, errors_1.logMetadataValidationError)(error);
29
+ log_1.default.newLine();
30
+ log_1.default.warn('Without further updates, the current store configuration may fail to be synchronized with the App Store or pass App Store review.');
31
+ const attempt = await (0, prompts_1.confirmAsync)({
32
+ message: 'Do you still want to push the store configuration?',
33
+ });
34
+ if (!attempt) {
35
+ throw error;
36
+ }
29
37
  }
38
+ const { app, auth } = await (0, context_1.ensureMetadataAppStoreAuthenticatedAsync)(metadataCtx);
39
+ const { unsubscribeTelemetry, executionId } = (0, telemetry_1.subscribeTelemetry)(events_1.MetadataEvent.APPLE_METADATA_UPLOAD, { app, auth });
30
40
  log_1.default.addNewLineIfNone();
31
41
  log_1.default.log('Uploading App Store configuration...');
32
42
  const errors = [];
@@ -53,5 +63,6 @@ async function uploadMetadataAsync(metadataCtx) {
53
63
  if (errors.length > 0) {
54
64
  throw new errors_1.MetadataUploadError(errors, executionId);
55
65
  }
66
+ return { appleLink: `https://appstoreconnect.apple.com/apps/${app.id}/appstore` };
56
67
  }
57
68
  exports.uploadMetadataAsync = uploadMetadataAsync;
@@ -10,6 +10,7 @@ const chalk_1 = tslib_1.__importDefault(require("chalk"));
10
10
  const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
11
11
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
12
12
  const appJson_1 = require("../../build/utils/appJson");
13
+ const env_1 = tslib_1.__importDefault(require("../../env"));
13
14
  const log_1 = tslib_1.__importStar(require("../../log"));
14
15
  const projectUtils_1 = require("../../project/projectUtils");
15
16
  const prompts_1 = require("../../prompts");
@@ -37,6 +38,9 @@ class AmbiguousApplicationIdError extends Error {
37
38
  }
38
39
  exports.AmbiguousApplicationIdError = AmbiguousApplicationIdError;
39
40
  async function getApplicationIdFromBareAsync(projectDir, gradleContext) {
41
+ if (env_1.default.overrideAndroidApplicationId) {
42
+ return env_1.default.overrideAndroidApplicationId;
43
+ }
40
44
  const errorMessage = 'Could not read applicationId from Android project.';
41
45
  if (gradleContext) {
42
46
  const buildGradle = await gradleUtils.getAppBuildGradleAsync(projectDir);
@@ -12,7 +12,6 @@ const promise_limit_1 = tslib_1.__importDefault(require("promise-limit"));
12
12
  const generated_1 = require("../graphql/generated");
13
13
  const PublishMutation_1 = require("../graphql/mutations/PublishMutation");
14
14
  const PublishQuery_1 = require("../graphql/queries/PublishQuery");
15
- const log_1 = tslib_1.__importDefault(require("../log"));
16
15
  const uploads_1 = require("../uploads");
17
16
  const expoCli_1 = require("../utils/expoCli");
18
17
  const uniqBy_1 = tslib_1.__importDefault(require("../utils/expodash/uniqBy"));
@@ -108,7 +107,13 @@ async function buildBundlesAsync({ projectDir, inputDir, }) {
108
107
  if (!packageJSON) {
109
108
  throw new Error('Could not locate package.json');
110
109
  }
111
- await (0, expoCli_1.expoCommandAsync)(projectDir, ['export', '--output-dir', inputDir, '--experimental-bundle'], { silent: !log_1.default.isDebug });
110
+ await (0, expoCli_1.expoCommandAsync)(projectDir, [
111
+ 'export',
112
+ '--output-dir',
113
+ inputDir,
114
+ '--experimental-bundle',
115
+ '--non-interactive',
116
+ ]);
112
117
  }
113
118
  exports.buildBundlesAsync = buildBundlesAsync;
114
119
  async function resolveInputDirectoryAsync(customInputDirectory) {
@@ -205,7 +210,7 @@ async function uploadAssetsAsync(assetsForUpdateInfoGroup, updateSpinnerText) {
205
210
  await Promise.all(missingAssets.map((missingAsset, i) => {
206
211
  assetUploadPromiseLimit(async () => {
207
212
  const presignedPost = JSON.parse(specifications[i]);
208
- return (0, uploads_1.uploadWithPresignedPostAsync)(missingAsset.path, presignedPost);
213
+ await (0, uploads_1.uploadWithPresignedPostAsync)(missingAsset.path, presignedPost);
209
214
  });
210
215
  }));
211
216
  updateSpinnerText === null || updateSpinnerText === void 0 ? void 0 : updateSpinnerText(`${missingAssets.length} new ${missingAssets.length === 1 ? 'asset' : 'assets'} uploading`);
@@ -8,23 +8,25 @@ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
8
8
  const path_1 = tslib_1.__importDefault(require("path"));
9
9
  const vcs_1 = require("../vcs");
10
10
  async function resolveWorkflowAsync(projectDir, platform) {
11
- let platformWorkflowMarker;
11
+ let platformWorkflowMarkers;
12
12
  try {
13
- platformWorkflowMarker =
13
+ platformWorkflowMarkers =
14
14
  platform === eas_build_job_1.Platform.ANDROID
15
- ? await config_plugins_1.AndroidConfig.Paths.getAndroidManifestAsync(projectDir)
16
- : config_plugins_1.IOSConfig.Paths.getPBXProjectPath(projectDir);
15
+ ? [
16
+ path_1.default.join(projectDir, 'android/app/build.gradle'),
17
+ await config_plugins_1.AndroidConfig.Paths.getAndroidManifestAsync(projectDir),
18
+ ]
19
+ : [config_plugins_1.IOSConfig.Paths.getPBXProjectPath(projectDir)];
17
20
  }
18
21
  catch {
19
22
  return eas_build_job_1.Workflow.MANAGED;
20
23
  }
21
- if (await fs_extra_1.default.pathExists(platformWorkflowMarker)) {
22
- return (await (0, vcs_1.getVcsClient)().isFileIgnoredAsync(path_1.default.relative(projectDir, platformWorkflowMarker)))
23
- ? eas_build_job_1.Workflow.MANAGED
24
- : eas_build_job_1.Workflow.GENERIC;
25
- }
26
- else {
27
- return eas_build_job_1.Workflow.MANAGED;
24
+ for (const marker of platformWorkflowMarkers) {
25
+ if ((await fs_extra_1.default.pathExists(marker)) &&
26
+ !(await (0, vcs_1.getVcsClient)().isFileIgnoredAsync(path_1.default.relative(projectDir, marker)))) {
27
+ return eas_build_job_1.Workflow.GENERIC;
28
+ }
28
29
  }
30
+ return eas_build_job_1.Workflow.MANAGED;
29
31
  }
30
32
  exports.resolveWorkflowAsync = resolveWorkflowAsync;
@@ -1,2 +1,8 @@
1
1
  export declare function isExistingFileAsync(filePath: string): Promise<boolean>;
2
2
  export declare function uploadAppArchiveAsync(path: string): Promise<string>;
3
+ /**
4
+ * S3 returns broken URLs, sth like:
5
+ * https://submission-service-archives.s3.amazonaws.com/production%2Fdc98ca84-1473-4cb3-ae81-8c7b291cb27e%2F4424aa95-b985-4e2f-8755-9507b1037c1c
6
+ * This function replaces %2F with /.
7
+ */
8
+ export declare function fixArchiveUrl(archiveUrl: string): string;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uploadAppArchiveAsync = exports.isExistingFileAsync = void 0;
3
+ exports.fixArchiveUrl = exports.uploadAppArchiveAsync = exports.isExistingFileAsync = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
6
+ const url_1 = require("url");
6
7
  const generated_1 = require("../../graphql/generated");
7
8
  const uploads_1 = require("../../uploads");
8
9
  const progress_1 = require("../../utils/progress");
@@ -18,11 +19,23 @@ async function isExistingFileAsync(filePath) {
18
19
  exports.isExistingFileAsync = isExistingFileAsync;
19
20
  async function uploadAppArchiveAsync(path) {
20
21
  const fileSize = (await fs_extra_1.default.stat(path)).size;
21
- const { url } = await (0, uploads_1.uploadAsync)(generated_1.UploadSessionType.EasSubmitAppArchive, path, (0, progress_1.createProgressTracker)({
22
+ const { response } = await (0, uploads_1.uploadAsync)(generated_1.UploadSessionType.EasSubmitAppArchive, path, (0, progress_1.createProgressTracker)({
22
23
  total: fileSize,
23
24
  message: 'Uploading to EAS Submit',
24
25
  completedMessage: 'Uploaded to EAS Submit',
25
26
  }));
26
- return url;
27
+ const url = response.headers.get('location');
28
+ return fixArchiveUrl(String(url));
27
29
  }
28
30
  exports.uploadAppArchiveAsync = uploadAppArchiveAsync;
31
+ /**
32
+ * S3 returns broken URLs, sth like:
33
+ * https://submission-service-archives.s3.amazonaws.com/production%2Fdc98ca84-1473-4cb3-ae81-8c7b291cb27e%2F4424aa95-b985-4e2f-8755-9507b1037c1c
34
+ * This function replaces %2F with /.
35
+ */
36
+ function fixArchiveUrl(archiveUrl) {
37
+ const parsed = new url_1.URL(archiveUrl);
38
+ parsed.pathname = decodeURIComponent(parsed.pathname);
39
+ return parsed.toString();
40
+ }
41
+ exports.fixArchiveUrl = fixArchiveUrl;
@@ -1,8 +1,9 @@
1
+ import { Response } from 'node-fetch';
1
2
  import { UploadSessionType } from './graphql/generated';
2
3
  import { PresignedPost } from './graphql/mutations/UploadSessionMutation';
3
4
  import { ProgressHandler } from './utils/progress';
4
5
  export declare function uploadAsync(type: UploadSessionType, path: string, handleProgressEvent: ProgressHandler): Promise<{
5
- url: string;
6
+ response: Response;
6
7
  bucketKey: string;
7
8
  }>;
8
- export declare function uploadWithPresignedPostAsync(file: string, presignedPost: PresignedPost, handleProgressEvent?: ProgressHandler): Promise<string>;
9
+ export declare function uploadWithPresignedPostAsync(file: string, presignedPost: PresignedPost, handleProgressEvent?: ProgressHandler): Promise<Response>;
package/build/uploads.js CHANGED
@@ -9,9 +9,9 @@ const fetch_1 = tslib_1.__importDefault(require("./fetch"));
9
9
  const UploadSessionMutation_1 = require("./graphql/mutations/UploadSessionMutation");
10
10
  async function uploadAsync(type, path, handleProgressEvent) {
11
11
  const presignedPost = await UploadSessionMutation_1.UploadSessionMutation.createUploadSessionAsync(type);
12
- const url = await uploadWithPresignedPostAsync(path, presignedPost, handleProgressEvent);
13
12
  (0, assert_1.default)(presignedPost.fields.key, 'key is not specified in in presigned post');
14
- return { url, bucketKey: presignedPost.fields.key };
13
+ const response = await uploadWithPresignedPostAsync(path, presignedPost, handleProgressEvent);
14
+ return { response, bucketKey: presignedPost.fields.key };
15
15
  }
16
16
  exports.uploadAsync = uploadAsync;
17
17
  async function uploadWithPresignedPostAsync(file, presignedPost, handleProgressEvent) {
@@ -45,7 +45,7 @@ async function uploadWithPresignedPostAsync(file, presignedPost, handleProgressE
45
45
  try {
46
46
  const response = await uploadPromise;
47
47
  handleProgressEvent({ isComplete: true });
48
- return String(response.headers.get('location'));
48
+ return response;
49
49
  }
50
50
  catch (error) {
51
51
  handleProgressEvent({ isComplete: true, error });
@@ -53,8 +53,7 @@ async function uploadWithPresignedPostAsync(file, presignedPost, handleProgressE
53
53
  }
54
54
  }
55
55
  else {
56
- const response = await uploadPromise;
57
- return String(response.headers.get('location'));
56
+ return await uploadPromise;
58
57
  }
59
58
  }
60
59
  exports.uploadWithPresignedPostAsync = uploadWithPresignedPostAsync;
@@ -1 +1 @@
1
- {"version":"0.54.0","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"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.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"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":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"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","hidden":true,"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","multiple":false},"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},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":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,"exclusive":["auto-submit-with-profile"]},"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","multiple":false,"exclusive":["auto-submit"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"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","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"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)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"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"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"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}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":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}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"metadata:pull":{"id":"metadata:pull","description":"generate the local store configuration from the app stores","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false}},"args":[],"_globalFlags":{}},"metadata:push":{"id":"metadata:push","description":"sync the local store configuration to the app stores","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false}},"args":[],"_globalFlags":{}},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"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","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":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","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","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},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"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","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}
1
+ {"version":"0.55.1","commands":{"analytics":{"id":"analytics","description":"display or change analytics settings","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"STATUS","options":["on","off"]}]},"config":{"id":"config","description":"display project configuration (app.json + eas.json)","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"profile":{"name":"profile","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"credentials":{"id":"credentials","description":"manage credentials","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"diagnostics":{"id":"diagnostics","description":"display environment info","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"submit":{"id":"submit","description":"submit app binary to App Store and/or Play Store","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["build:submit"],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"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.","multiple":false},"latest":{"name":"latest","type":"boolean","description":"Submit the latest build for specified platform","allowNo":false,"exclusive":["id","path","url"]},"id":{"name":"id","type":"option","description":"ID of the build to submit","multiple":false,"exclusive":["latest, path, url"]},"path":{"name":"path","type":"option","description":"Path to the .apk/.aab/.ipa file","multiple":false,"exclusive":["latest","id","url"]},"url":{"name":"url","type":"option","description":"App archive url","multiple":false,"exclusive":["latest","id","path"]},"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":[],"_globalFlags":{}},"account:login":{"id":"account:login","description":"log in with your Expo account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["login"],"flags":{},"args":[]},"account:logout":{"id":"account:logout","description":"log out","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["logout"],"flags":{},"args":[]},"account:view":{"id":"account:view","description":"show the username you are logged in as","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":["whoami"],"flags":{},"args":[]},"branch:create":{"id":"branch:create","description":"create a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"branch:delete":{"id":"branch:delete","description":"delete a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"branch:list":{"id":"branch:list","description":"list all branches","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"return output as JSON","allowNo":false}},"args":[],"_globalFlags":{}},"branch:publish":{"id":"branch:publish","description":"deprecated, use \"eas update\"","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{},"args":[]},"branch:rename":{"id":"branch:rename","description":"rename a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"from":{"name":"from","type":"option","description":"current name of the branch.","required":false,"multiple":false},"to":{"name":"to","type":"option","description":"new name of the branch.","required":false,"multiple":false},"json":{"name":"json","type":"boolean","description":"return a json with the edited branch's ID and name.","allowNo":false}},"args":[],"_globalFlags":{}},"branch:view":{"id":"branch:view","description":"view a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"build:cancel":{"id":"build:cancel","description":"cancel a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"BUILD_ID"}]},"build:configure":{"id":"build:configure","description":"configure the project to support EAS Build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"]}},"args":[],"_globalFlags":{}},"build":{"id":"build","description":"start a build","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","helpValue":"(android|ios|all)","multiple":false,"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","hidden":true,"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","multiple":false},"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},"output":{"name":"output","type":"option","description":"Output path for local build","multiple":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,"exclusive":["auto-submit-with-profile"]},"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","multiple":false,"exclusive":["auto-submit"]},"resource-class":{"name":"resource-class","type":"option","description":"The instance type that will be used to run this build [experimental]","hidden":true,"helpValue":"(default|large)","multiple":false,"options":["default","large"]}},"args":[],"_globalFlags":{}},"build:inspect":{"id":"build:inspect","description":"inspect the state of the project at specific build stages, useful for troubleshooting","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","required":true,"helpValue":"(android|ios)","multiple":false,"options":["android","ios"]},"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","multiple":false},"stage":{"name":"stage","type":"option","char":"s","description":"Stage of the build you want to inspect.\n archive - builds the project archive that would be uploaded to EAS when building\n pre-build - prepares the project to be built with Gradle/Xcode. Does not run the native build.\n post-build - builds the native project and leaves the output directory for inspection","required":true,"helpValue":"(archive|pre-build|post-build)","multiple":false,"options":["archive","pre-build","post-build"]},"output":{"name":"output","type":"option","char":"o","description":"Output directory.","required":true,"helpValue":"OUTPUT_DIRECTORY","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete OUTPUT_DIRECTORY if it already exists.","allowNo":false},"verbose":{"name":"verbose","type":"boolean","char":"v","allowNo":false}},"args":[],"_globalFlags":{}},"build:list":{"id":"build:list","description":"list all builds for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","helpValue":"(all|android|ios)","multiple":false,"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)","multiple":false,"options":["new","in-queue","in-progress","errored","finished","canceled"]},"distribution":{"name":"distribution","type":"option","helpValue":"(store|internal|simulator)","multiple":false,"options":["store","internal","simulator"]},"channel":{"name":"channel","type":"option","multiple":false},"appVersion":{"name":"appVersion","type":"option","multiple":false},"appBuildVersion":{"name":"appBuildVersion","type":"option","multiple":false},"sdkVersion":{"name":"sdkVersion","type":"option","multiple":false},"runtimeVersion":{"name":"runtimeVersion","type":"option","multiple":false},"appIdentifier":{"name":"appIdentifier","type":"option","multiple":false},"buildProfile":{"name":"buildProfile","type":"option","multiple":false},"gitCommitHash":{"name":"gitCommitHash","type":"option","multiple":false},"limit":{"name":"limit","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"build:view":{"id":"build:view","description":"view a build for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"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"}],"_globalFlags":{}},"channel:create":{"id":"channel:create","description":"create a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"channel:delete":{"id":"channel:delete","description":"Delete a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"json":{"name":"json","type":"boolean","description":"print output as a JSON object","allowNo":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[{"name":"name","description":"Name of the channel to delete","required":false}],"_globalFlags":{}},"channel:edit":{"id":"channel:edit","description":"point a channel at a new branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Name of the branch to point to","multiple":false},"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}],"_globalFlags":{}},"channel:list":{"id":"channel:list","description":"list all channels","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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":[],"_globalFlags":{}},"channel:rollout":{"id":"channel:rollout","description":"Rollout a new branch out to a channel incrementally.","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","hidden":true,"aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"branch to rollout","required":false,"multiple":false},"percent":{"name":"percent","type":"option","description":"percent of traffic to redirect to the new branch","required":false,"multiple":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}],"_globalFlags":{}},"channel:view":{"id":"channel:view","description":"view a channel","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"device:create":{"id":"device:create","description":"register new Apple Devices to use for internal distribution","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"device:delete":{"id":"device:delete","description":"remove a registered device from your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false},"udid":{"name":"udid","type":"option","multiple":true}},"args":[],"_globalFlags":{}},"device:list":{"id":"device:list","description":"list all registered devices for your account","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"apple-team-id":{"name":"apple-team-id","type":"option","multiple":false}},"args":[],"_globalFlags":{}},"device:view":{"id":"device:view","description":"view a device for your project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"UDID"}]},"metadata:pull":{"id":"metadata:pull","description":"generate the local store configuration from the app stores","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false}},"args":[],"_globalFlags":{}},"metadata:push":{"id":"metadata:push","description":"sync the local store configuration to the app stores","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"profile":{"name":"profile","type":"option","description":"Name of the submit profile from eas.json. Defaults to \"production\" if defined in eas.json.","multiple":false}},"args":[],"_globalFlags":{}},"project:info":{"id":"project:info","description":"information about the current project","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"project:init":{"id":"project:init","description":"create or link an EAS project","strict":true,"pluginName":"eas-cli","pluginAlias":"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","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"scope":{"name":"scope","type":"option","description":"Scope for the secret","helpValue":"(account|project)","multiple":false,"options":["account","project"],"default":"project"},"name":{"name":"name","type":"option","description":"Name of the secret","multiple":false},"value":{"name":"value","type":"option","description":"Value of the secret","multiple":false},"force":{"name":"force","type":"boolean","description":"Delete and recreate existing secrets","allowNo":false}},"args":[],"_globalFlags":{}},"secret:delete":{"id":"secret:delete","description":"delete an environment secret by ID","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"ID of the secret to delete","multiple":false}},"args":[],"_globalFlags":{}},"secret:list":{"id":"secret:list","description":"list environment secrets available for your current app","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[]},"update:configure":{"id":"update:configure","description":"configure the project to support EAS Update","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"platform":{"name":"platform","type":"option","char":"p","description":"Platform to configure","helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"}},"args":[],"_globalFlags":{}},"update:delete":{"id":"update:delete","description":"delete all the updates in an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"update":{"id":"update","description":"publish an update group","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"Branch to publish the update group on","required":false,"multiple":false},"message":{"name":"message","type":"option","description":"A short message describing the update","required":false,"multiple":false},"republish":{"name":"republish","type":"boolean","description":"Republish an update group","allowNo":false,"exclusive":["input-dir","skip-bundler"]},"group":{"name":"group","type":"option","description":"Update group to republish","multiple":false,"exclusive":["input-dir","skip-bundler"]},"input-dir":{"name":"input-dir","type":"option","description":"Location of the bundle","required":false,"multiple":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","required":false,"helpValue":"(android|ios|all)","multiple":false,"options":["android","ios","all"],"default":"all"},"json":{"name":"json","type":"boolean","description":"Enable JSON output, non-JSON messages will be printed to stderr","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},"private-key-path":{"name":"private-key-path","type":"option","description":"File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named \"private-key.pem\" in the certificate's directory.","required":false,"multiple":false},"non-interactive":{"name":"non-interactive","type":"boolean","description":"Run command in non-interactive mode","allowNo":false}},"args":[],"_globalFlags":{}},"update:list":{"id":"update:list","description":"view the recent updates for a branch","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"branch":{"name":"branch","type":"option","description":"List all updates on this branch","multiple":false,"exclusive":["all"]},"all":{"name":"all","type":"boolean","description":"List all updates associated with this project","allowNo":false,"exclusive":["branch"]},"json":{"name":"json","type":"boolean","description":"Return a json with all of the recent update groups.","allowNo":false}},"args":[],"_globalFlags":{}},"update:view":{"id":"update:view","description":"update group details","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","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}],"_globalFlags":{}},"webhook:create":{"id":"webhook:create","description":"create a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:delete":{"id":"webhook:delete","description":"delete a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"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","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]}},"args":[],"_globalFlags":{}},"webhook:update":{"id":"webhook:update","description":"update a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{"id":{"name":"id","type":"option","description":"Webhook ID","required":true,"multiple":false},"event":{"name":"event","type":"option","description":"Event type that triggers the webhook","helpValue":"(BUILD|SUBMIT)","multiple":false,"options":["BUILD","SUBMIT"]},"url":{"name":"url","type":"option","description":"Webhook URL","multiple":false},"secret":{"name":"secret","type":"option","description":"Secret used to create a hash signature of the request payload, provided in the 'Expo-Signature' header.","multiple":false}},"args":[],"_globalFlags":{}},"webhook:view":{"id":"webhook:view","description":"view a webhook","strict":true,"pluginName":"eas-cli","pluginAlias":"eas-cli","pluginType":"core","aliases":[],"flags":{},"args":[{"name":"ID","description":"ID of the webhook to view","required":true}]}}}