eas-cli 14.1.0 → 14.3.0

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 (34) hide show
  1. package/README.md +70 -70
  2. package/build/branch/utils.d.ts +1 -1
  3. package/build/branch/utils.js +1 -1
  4. package/build/commandUtils/context/contextUtils/findProjectDirAndVerifyProjectSetupAsync.js +5 -1
  5. package/build/commandUtils/context/contextUtils/loadServerSideEnvironmentVariablesAsync.js +2 -2
  6. package/build/commandUtils/flags.d.ts +1 -1
  7. package/build/commands/branch/create.js +1 -1
  8. package/build/commands/build/version/sync.js +1 -1
  9. package/build/commands/device/delete.js +2 -2
  10. package/build/commands/device/rename.js +2 -2
  11. package/build/commands/env/create.d.ts +1 -1
  12. package/build/commands/env/exec.js +6 -14
  13. package/build/commands/env/update.d.ts +1 -1
  14. package/build/commands/update/index.js +1 -0
  15. package/build/commands/worker/alias.js +1 -1
  16. package/build/commands/worker/deploy.d.ts +2 -51
  17. package/build/commands/worker/deploy.js +22 -7
  18. package/build/commands/workflow/run.js +12 -3
  19. package/build/devices/actions/create/currentMachineMethod.js +1 -1
  20. package/build/devices/actions/create/inputMethod.js +1 -1
  21. package/build/graphql/generated.d.ts +60 -6
  22. package/build/graphql/generated.js +12 -6
  23. package/build/graphql/mutations/WorkflowRevisionMutation.d.ts +2 -2
  24. package/build/project/fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync.js +2 -2
  25. package/build/project/publish.js +6 -2
  26. package/build/project/uploadAccountScopedFileAsync.d.ts +14 -0
  27. package/build/project/uploadAccountScopedFileAsync.js +35 -0
  28. package/build/utils/statuspageService.js +2 -2
  29. package/build/worker/upload.d.ts +2 -0
  30. package/build/worker/upload.js +6 -4
  31. package/oclif.manifest.json +8 -2
  32. package/package.json +8 -7
  33. package/build/project/uploadAccountScopedEasJsonAsync.d.ts +0 -12
  34. package/build/project/uploadAccountScopedEasJsonAsync.js +0 -34
@@ -24,10 +24,10 @@ async function loadServerSideEnvironmentVariablesAsync({ environment, projectId,
24
24
  .filter(({ name, value }) => name && value)
25
25
  .map(({ name, value }) => [name, value]));
26
26
  if (Object.keys(serverEnvVars).length > 0) {
27
- log_1.default.log(`Environment variables with visibility "Plain text" and "Sensitive" loaded from the "${environment.toLowerCase()}" environment on EAS servers: ${Object.keys(serverEnvVars).join(', ')}.`);
27
+ log_1.default.log(`Environment variables with visibility "Plain text" and "Sensitive" loaded from the "${environment.toLowerCase()}" environment on EAS: ${Object.keys(serverEnvVars).join(', ')}.`);
28
28
  }
29
29
  else {
30
- log_1.default.log(`No environment variables with visibility "Plain text" and "Sensitive" found for the "${environment.toLowerCase()}" environment on EAS servers.`);
30
+ log_1.default.log(`No environment variables with visibility "Plain text" and "Sensitive" found for the "${environment.toLowerCase()}" environment on EAS.`);
31
31
  }
32
32
  log_1.default.newLine();
33
33
  cachedServerSideEnvironmentVariables[environment] = serverEnvVars;
@@ -19,7 +19,7 @@ export declare const EASVariableFormatFlag: {
19
19
  format: import("@oclif/core/lib/interfaces").OptionFlag<string>;
20
20
  };
21
21
  export declare const EASVariableVisibilityFlag: {
22
- visibility: import("@oclif/core/lib/interfaces").OptionFlag<"secret" | "plaintext" | "sensitive" | undefined>;
22
+ visibility: import("@oclif/core/lib/interfaces").OptionFlag<"plaintext" | "sensitive" | "secret" | undefined>;
23
23
  };
24
24
  export type EASEnvironmentVariableScopeFlagValue = 'project' | 'account';
25
25
  export declare const EASEnvironmentVariableScopeFlag: {
@@ -45,7 +45,7 @@ class BranchCreate extends EasCommand_1.default {
45
45
  type: 'text',
46
46
  name: 'name',
47
47
  message: 'Provide a branch name:',
48
- initial: await (0, utils_1.getDefaultBranchNameAsync)(vcsClient),
48
+ initial: (await (0, utils_1.getDefaultBranchNameAsync)(vcsClient)) ?? undefined,
49
49
  validate: value => (value ? true : validationMessage),
50
50
  }));
51
51
  }
@@ -82,7 +82,7 @@ class BuildVersionSyncView extends EasCommand_1.default {
82
82
  const remoteVersions = await AppVersionQuery_1.AppVersionQuery.latestVersionAsync(graphqlClient, projectId, (0, AppPlatform_1.toAppPlatform)(profileInfo.platform), applicationIdentifier);
83
83
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, profileInfo.platform, vcsClient);
84
84
  if (!remoteVersions?.buildVersion) {
85
- log_1.default.warn(`Skipping versions sync for ${platformDisplayName}. There are no versions configured on Expo servers, use "eas build:version:set" or run a build to initialize it.`);
85
+ log_1.default.warn(`Skipping versions sync for ${platformDisplayName}. There are no versions configured on EAS, use "eas build:version:set" or run a build to initialize it.`);
86
86
  continue;
87
87
  }
88
88
  if (workflow === eas_build_job_1.Workflow.MANAGED) {
@@ -108,10 +108,10 @@ class DeviceDelete extends EasCommand_1.default {
108
108
  return true;
109
109
  }
110
110
  async removeDeviceFromExpoAsync(graphqlClient, chosenDevice) {
111
- const removalSpinner = (0, ora_1.ora)(`Removing Apple device on Expo`).start();
111
+ const removalSpinner = (0, ora_1.ora)(`Removing Apple device on EAS`).start();
112
112
  try {
113
113
  await AppleDeviceMutation_1.AppleDeviceMutation.deleteAppleDeviceAsync(graphqlClient, chosenDevice.id);
114
- removalSpinner.succeed('Removed Apple device from Expo');
114
+ removalSpinner.succeed('Removed Apple device from EAS');
115
115
  }
116
116
  catch (err) {
117
117
  removalSpinner.fail();
@@ -75,12 +75,12 @@ class DeviceRename extends EasCommand_1.default {
75
75
  return name;
76
76
  }
77
77
  async renameDeviceOnExpoAsync(graphqlClient, chosenDevice, newDeviceName) {
78
- const removalSpinner = (0, ora_1.ora)(`Renaming Apple device on Expo`).start();
78
+ const removalSpinner = (0, ora_1.ora)(`Renaming Apple device on EAS`).start();
79
79
  try {
80
80
  await AppleDeviceMutation_1.AppleDeviceMutation.updateAppleDeviceAsync(graphqlClient, chosenDevice.id, {
81
81
  name: newDeviceName,
82
82
  });
83
- removalSpinner.succeed('Renamed Apple device on Expo');
83
+ removalSpinner.succeed('Renamed Apple device on EAS');
84
84
  }
85
85
  catch (err) {
86
86
  removalSpinner.fail();
@@ -12,7 +12,7 @@ export default class EnvCreate extends EasCommand {
12
12
  'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
13
  environment: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableEnvironment[] | undefined>;
14
14
  scope: import("@oclif/core/lib/interfaces").OptionFlag<EASEnvironmentVariableScopeFlagValue>;
15
- visibility: import("@oclif/core/lib/interfaces").OptionFlag<"secret" | "plaintext" | "sensitive" | undefined>;
15
+ visibility: import("@oclif/core/lib/interfaces").OptionFlag<"plaintext" | "sensitive" | "secret" | undefined>;
16
16
  name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
17
17
  value: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
18
18
  link: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
@@ -98,22 +98,14 @@ class EnvExec extends EasCommand_1.default {
98
98
  appId: projectId,
99
99
  environment,
100
100
  });
101
- const secretEnvironmentVariables = environmentVariablesQueryResult.filter(({ value }) => !value);
102
- if (secretEnvironmentVariables.length > 0) {
103
- log_1.default.warn(`The following environment variables are secret and cannot be downloaded locally:`);
104
- for (const { name } of secretEnvironmentVariables) {
105
- log_1.default.warn(`- ${name}`);
106
- }
107
- log_1.default.warn('Proceeding with the rest of the environment variables.');
108
- log_1.default.newLine();
109
- }
110
101
  const nonSecretEnvironmentVariables = environmentVariablesQueryResult.filter(({ value }) => !!value);
111
- if (nonSecretEnvironmentVariables.length === 0) {
112
- throw new Error('No readable environment variables found for the selected environment.');
102
+ if (nonSecretEnvironmentVariables.length > 0) {
103
+ log_1.default.log(`Environment variables with visibility "Plain text" and "Sensitive" loaded from the "${environment.toLowerCase()}" environment on EAS: ${nonSecretEnvironmentVariables
104
+ .map(e => e.name)
105
+ .join(', ')}.`);
113
106
  }
114
- log_1.default.log(`Loaded environment variables for the selected environment "${environment.toLowerCase()}":`);
115
- for (const { name } of nonSecretEnvironmentVariables) {
116
- log_1.default.log(`- ${name}`);
107
+ else {
108
+ log_1.default.log(`No environment variables with visibility "Plain text" and "Sensitive" found for the "${environment.toLowerCase()}" environment on EAS.`);
117
109
  }
118
110
  log_1.default.newLine();
119
111
  const environmentVariables = {};
@@ -7,7 +7,7 @@ export default class EnvUpdate extends EasCommand {
7
7
  'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
8
8
  environment: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableEnvironment[] | undefined>;
9
9
  scope: import("@oclif/core/lib/interfaces").OptionFlag<EASEnvironmentVariableScopeFlagValue>;
10
- visibility: import("@oclif/core/lib/interfaces").OptionFlag<"secret" | "plaintext" | "sensitive" | undefined>;
10
+ visibility: import("@oclif/core/lib/interfaces").OptionFlag<"plaintext" | "sensitive" | "secret" | undefined>;
11
11
  'variable-name': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
12
12
  'variable-environment': import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableEnvironment | undefined>;
13
13
  name: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
@@ -332,6 +332,7 @@ class UpdatePublish extends EasCommand_1.default {
332
332
  gitCommitHash,
333
333
  isGitWorkingTreeDirty,
334
334
  awaitingCodeSigningInfo: !!codeSigningInfo,
335
+ environment: environment ?? null,
335
336
  };
336
337
  });
337
338
  let newUpdates;
@@ -46,7 +46,7 @@ class WorkerAlias extends EasCommand_1.default {
46
46
  if (flags.json) {
47
47
  (0, json_1.enableJsonOutput)();
48
48
  }
49
- log_1.default.warn('EAS Worker Deployments are in beta and subject to breaking changes.');
49
+ log_1.default.warn('EAS Hosting is still in beta and subject to changes.');
50
50
  const { getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(WorkerAlias, {
51
51
  nonInteractive: true,
52
52
  withServerSideEnvironment: null,
@@ -9,61 +9,12 @@ export default class WorkerDeploy extends EasCommand {
9
9
  static flags: {
10
10
  json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
11
  'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ environment: import("@oclif/core/lib/interfaces").OptionFlag<EnvironmentVariableEnvironment | undefined>;
12
13
  prod: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
14
  alias: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
14
15
  id: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
15
16
  'export-dir': import("@oclif/core/lib/interfaces").OptionFlag<string>;
16
- environment: {
17
- description: string;
18
- name: string;
19
- char?: import("@oclif/core/lib/interfaces").AlphabetUppercase | import("@oclif/core/lib/interfaces").AlphabetLowercase | undefined;
20
- summary?: string | undefined;
21
- helpLabel?: string | undefined;
22
- helpGroup?: string | undefined;
23
- env?: string | undefined;
24
- hidden?: boolean | undefined;
25
- required?: boolean | undefined;
26
- dependsOn?: string[] | undefined;
27
- exclusive?: string[] | undefined;
28
- exactlyOne?: string[] | undefined;
29
- relationships?: import("@oclif/core/lib/interfaces/parser").Relationship[] | undefined;
30
- deprecated?: true | import("@oclif/core/lib/interfaces/parser").Deprecation | undefined;
31
- aliases?: string[] | undefined;
32
- deprecateAliases?: boolean | undefined;
33
- parse: import("@oclif/core/lib/interfaces/parser").FlagParser<EnvironmentVariableEnvironment | undefined, string, any>;
34
- type: "option";
35
- helpValue?: string | undefined;
36
- options?: string[] | undefined;
37
- multiple: false;
38
- defaultHelp?: import("@oclif/core/lib/interfaces/parser").DefaultHelp<EnvironmentVariableEnvironment | undefined, Record<string, unknown>>;
39
- input: string[];
40
- default?: import("@oclif/core/lib/interfaces").Default<EnvironmentVariableEnvironment | undefined, Record<string, unknown>>;
41
- } | {
42
- description: string;
43
- name: string;
44
- char?: import("@oclif/core/lib/interfaces").AlphabetUppercase | import("@oclif/core/lib/interfaces").AlphabetLowercase | undefined;
45
- summary?: string | undefined;
46
- helpLabel?: string | undefined;
47
- helpGroup?: string | undefined;
48
- env?: string | undefined;
49
- hidden?: boolean | undefined;
50
- required?: boolean | undefined;
51
- dependsOn?: string[] | undefined;
52
- exclusive?: string[] | undefined;
53
- exactlyOne?: string[] | undefined;
54
- relationships?: import("@oclif/core/lib/interfaces/parser").Relationship[] | undefined;
55
- deprecated?: true | import("@oclif/core/lib/interfaces/parser").Deprecation | undefined;
56
- aliases?: string[] | undefined;
57
- deprecateAliases?: boolean | undefined;
58
- parse: import("@oclif/core/lib/interfaces/parser").FlagParser<EnvironmentVariableEnvironment | undefined, string, any>;
59
- type: "option";
60
- helpValue?: string | undefined;
61
- options?: string[] | undefined;
62
- multiple: true;
63
- defaultHelp?: import("@oclif/core/lib/interfaces/parser").DefaultHelp<EnvironmentVariableEnvironment | undefined, Record<string, unknown>>;
64
- input: string[];
65
- default?: import("@oclif/core/lib/interfaces").Default<(EnvironmentVariableEnvironment | undefined)[] | undefined, Record<string, unknown>>;
66
- };
17
+ 'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
67
18
  };
68
19
  static contextDefinition: {
69
20
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
@@ -46,10 +46,11 @@ class WorkerDeploy extends EasCommand_1.default {
46
46
  helpValue: 'dir',
47
47
  default: 'dist',
48
48
  }),
49
- environment: {
50
- ...flags_1.EASEnvironmentFlag.environment,
51
- description: 'Deploy with EAS Environment Variables matching the specified environment.',
52
- },
49
+ 'dry-run': core_1.Flags.boolean({
50
+ description: 'Outputs a tarball of the new deployment instead of uploading it.',
51
+ default: false,
52
+ }),
53
+ ...flags_1.EASEnvironmentFlag,
53
54
  ...flags_1.EasNonInteractiveAndJsonFlags,
54
55
  };
55
56
  static contextDefinition = {
@@ -63,7 +64,7 @@ class WorkerDeploy extends EasCommand_1.default {
63
64
  if (flags.json) {
64
65
  (0, json_1.enableJsonOutput)();
65
66
  }
66
- log_1.default.warn('EAS Worker Deployments are in beta and subject to breaking changes.');
67
+ log_1.default.warn('EAS Hosting is still in beta and subject to changes.');
67
68
  const { getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, projectDir, } = await this.getContextAsync(WorkerDeploy, { ...flags, withServerSideEnvironment: null });
68
69
  const projectDist = await resolveExportedProjectAsync(flags, projectDir);
69
70
  const { projectId } = await getDynamicPrivateProjectConfigAsync();
@@ -185,6 +186,15 @@ class WorkerDeploy extends EasCommand_1.default {
185
186
  assetMap,
186
187
  manifest,
187
188
  }));
189
+ if (flags.dryRun) {
190
+ const DRY_RUN_OUTPUT_PATH = 'deploy.tar.gz';
191
+ await node_fs_1.default.promises.copyFile(tarPath, DRY_RUN_OUTPUT_PATH);
192
+ progress.succeed('Saved deploy.tar.gz tarball');
193
+ if (flags.json) {
194
+ (0, json_1.printJsonOnlyOutput)({ tarPath: DRY_RUN_OUTPUT_PATH });
195
+ }
196
+ return;
197
+ }
188
198
  const uploadUrl = await (0, deployment_1.getSignedDeploymentUrlAsync)(graphqlClient, {
189
199
  appId: projectId,
190
200
  deploymentIdentifier: flags.deploymentIdentifier,
@@ -284,6 +294,8 @@ class WorkerDeploy extends EasCommand_1.default {
284
294
  aliasName: flags.alias?.trim().toLowerCase(),
285
295
  deploymentIdentifier: flags.id?.trim(),
286
296
  exportDir: flags['export-dir'],
297
+ environment: flags['environment'],
298
+ dryRun: flags['dry-run'],
287
299
  };
288
300
  }
289
301
  }
@@ -298,7 +310,7 @@ async function resolveExportedProjectAsync(flags, projectDir) {
298
310
  isDirectory(clientPath),
299
311
  ]);
300
312
  if (!exportDirStat?.isDirectory()) {
301
- throw new Error(`No "${flags.exportDir}/" folder found. Prepare your project for deployment with "npx expo export --platform web"`);
313
+ throw new Error(`No "${flags.exportDir}/" folder found. Export your app with "npx expo export --platform web"`);
302
314
  }
303
315
  if (expoRoutesStat?.isFile()) {
304
316
  return {
@@ -316,6 +328,9 @@ function logExportedProjectInfo(project) {
316
328
  // Only show the timestamp for exports older than 1 minute
317
329
  if (project.modifiedAt && Date.now() - project.modifiedAt.getTime() > 60000) {
318
330
  modifiedAgo = ` - exported ${(0, timeago_js_1.format)(project.modifiedAt)}`;
331
+ log_1.default.warn(`> Project export: ${project.type}${modifiedAgo}}`);
332
+ }
333
+ else {
334
+ log_1.default.log((0, chalk_1.default) `{dim > Project export: ${project.type}}`);
319
335
  }
320
- log_1.default.log((0, chalk_1.default) `{dim > Project export: ${project.type}${modifiedAgo}}`);
321
336
  }
@@ -11,7 +11,7 @@ const WorkflowRevisionMutation_1 = require("../../graphql/mutations/WorkflowRevi
11
11
  const WorkflowRunMutation_1 = require("../../graphql/mutations/WorkflowRunMutation");
12
12
  const log_1 = tslib_1.__importStar(require("../../log"));
13
13
  const projectUtils_1 = require("../../project/projectUtils");
14
- const uploadAccountScopedEasJsonAsync_1 = require("../../project/uploadAccountScopedEasJsonAsync");
14
+ const uploadAccountScopedFileAsync_1 = require("../../project/uploadAccountScopedFileAsync");
15
15
  const uploadAccountScopedProjectSourceAsync_1 = require("../../project/uploadAccountScopedProjectSourceAsync");
16
16
  const workflowFile_1 = require("../../utils/workflowFile");
17
17
  class WorkflowRun extends EasCommand_1.default {
@@ -65,16 +65,24 @@ class WorkflowRun extends EasCommand_1.default {
65
65
  }
66
66
  let projectArchiveBucketKey;
67
67
  let easJsonBucketKey;
68
+ let packageJsonBucketKey;
68
69
  try {
69
70
  ({ projectArchiveBucketKey } = await (0, uploadAccountScopedProjectSourceAsync_1.uploadAccountScopedProjectSourceAsync)({
70
71
  graphqlClient,
71
72
  vcsClient,
72
73
  accountId: account.id,
73
74
  }));
74
- ({ easJsonBucketKey } = await (0, uploadAccountScopedEasJsonAsync_1.uploadAccountScopedEasJsonAsync)({
75
+ ({ fileBucketKey: easJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
75
76
  graphqlClient,
76
77
  accountId: account.id,
77
- projectDir,
78
+ filePath: path.join(projectDir, 'eas.json'),
79
+ maxSizeBytes: 1024 * 1024,
80
+ }));
81
+ ({ fileBucketKey: packageJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
82
+ graphqlClient,
83
+ accountId: account.id,
84
+ filePath: path.join(projectDir, 'package.json'),
85
+ maxSizeBytes: 1024 * 1024,
78
86
  }));
79
87
  }
80
88
  catch (err) {
@@ -93,6 +101,7 @@ class WorkflowRun extends EasCommand_1.default {
93
101
  type: generated_1.WorkflowProjectSourceType.Gcs,
94
102
  projectArchiveBucketKey,
95
103
  easJsonBucketKey,
104
+ packageJsonBucketKey,
96
105
  },
97
106
  },
98
107
  });
@@ -31,7 +31,7 @@ async function collectDataAndRegisterDeviceAsync(graphqlClient, { accountId, app
31
31
  return;
32
32
  }
33
33
  const { udid, deviceClass, name } = deviceData;
34
- const spinner = (0, ora_1.ora)(`Registering Apple device on Expo`).start();
34
+ const spinner = (0, ora_1.ora)(`Registering Apple device on EAS`).start();
35
35
  try {
36
36
  await AppleDeviceMutation_1.AppleDeviceMutation.createAppleDeviceAsync(graphqlClient, {
37
37
  appleTeamId: appleTeam.id,
@@ -24,7 +24,7 @@ async function runInputMethodAsync(graphqlClient, accountId, appleTeam) {
24
24
  exports.runInputMethodAsync = runInputMethodAsync;
25
25
  async function collectDataAndRegisterDeviceAsync(graphqlClient, { accountId, appleTeam, }) {
26
26
  const { udid, deviceClass, name } = await collectDeviceDataAsync(appleTeam);
27
- const spinner = (0, ora_1.ora)(`Registering Apple device on Expo`).start();
27
+ const spinner = (0, ora_1.ora)(`Registering Apple device on EAS`).start();
28
28
  try {
29
29
  await AppleDeviceMutation_1.AppleDeviceMutation.createAppleDeviceAsync(graphqlClient, {
30
30
  appleTeamId: appleTeam.id,
@@ -166,6 +166,8 @@ export type Account = {
166
166
  id: Scalars['ID']['output'];
167
167
  isCurrent: Scalars['Boolean']['output'];
168
168
  isDisabled: Scalars['Boolean']['output'];
169
+ /** Whether an Account plan falls into AppDevDomainName's free or paid tier */
170
+ isFreeAppDevDomainTier: Scalars['Boolean']['output'];
169
171
  /** Whether this account has SSO enabled. Can be queried by all members. */
170
172
  isSSOEnabled: Scalars['Boolean']['output'];
171
173
  lastDeletionAttemptTime?: Maybe<Scalars['DateTime']['output']>;
@@ -176,6 +178,7 @@ export type Account = {
176
178
  owner?: Maybe<User>;
177
179
  /** Owning UserActor of this account if personal account */
178
180
  ownerUserActor?: Maybe<UserActor>;
181
+ profileImageUrl: Scalars['String']['output'];
179
182
  pushSecurityEnabled: Scalars['Boolean']['output'];
180
183
  /** @deprecated Legacy access tokens are deprecated */
181
184
  requiresAccessTokenForPushSecurity: Scalars['Boolean']['output'];
@@ -1216,6 +1219,8 @@ export type App = Project & {
1216
1219
  /** EAS updates owned by an app */
1217
1220
  updates: Array<Update>;
1218
1221
  updatesPaginated: AppUpdatesConnection;
1222
+ /** Project query object for querying EAS usage metrics */
1223
+ usageMetrics: AppUsageMetrics;
1219
1224
  /** @deprecated Use ownerAccount.name instead */
1220
1225
  username: Scalars['String']['output'];
1221
1226
  /** @deprecated No longer supported */
@@ -1750,6 +1755,37 @@ export type AppUpdatesConnection = {
1750
1755
  export declare enum AppUploadSessionType {
1751
1756
  ProfileImageUpload = "PROFILE_IMAGE_UPLOAD"
1752
1757
  }
1758
+ export type AppUsageMetric = {
1759
+ __typename?: 'AppUsageMetric';
1760
+ id: Scalars['ID']['output'];
1761
+ metricType: UsageMetricType;
1762
+ serviceMetric: EasServiceMetric;
1763
+ timestamp: Scalars['DateTime']['output'];
1764
+ value: Scalars['Float']['output'];
1765
+ };
1766
+ export type AppUsageMetricTotal = {
1767
+ __typename?: 'AppUsageMetricTotal';
1768
+ billingPeriod: BillingPeriod;
1769
+ id: Scalars['ID']['output'];
1770
+ planMetrics: Array<EstimatedUsage>;
1771
+ /** Total cost of overages, in cents */
1772
+ totalCost: Scalars['Float']['output'];
1773
+ };
1774
+ export type AppUsageMetrics = {
1775
+ __typename?: 'AppUsageMetrics';
1776
+ byBillingPeriod: AppUsageMetricTotal;
1777
+ metricsForServiceMetric: Array<AppUsageMetric>;
1778
+ };
1779
+ export type AppUsageMetricsByBillingPeriodArgs = {
1780
+ date: Scalars['DateTime']['input'];
1781
+ service?: InputMaybe<EasService>;
1782
+ };
1783
+ export type AppUsageMetricsMetricsForServiceMetricArgs = {
1784
+ filterParams?: InputMaybe<Scalars['JSONObject']['input']>;
1785
+ granularity: UsageMetricsGranularity;
1786
+ serviceMetric: EasServiceMetric;
1787
+ timespan: UsageMetricsTimespan;
1788
+ };
1753
1789
  /** Represents Play Store/App Store version of an application */
1754
1790
  export type AppVersion = {
1755
1791
  __typename?: 'AppVersion';
@@ -2796,6 +2832,7 @@ export declare enum CrashSampleFor {
2796
2832
  Oldest = "OLDEST"
2797
2833
  }
2798
2834
  export type CrashesFilters = {
2835
+ crashKind?: InputMaybe<Array<WorkerDeploymentCrashKind>>;
2799
2836
  name?: InputMaybe<Array<Scalars['String']['input']>>;
2800
2837
  };
2801
2838
  export type CreateAccessTokenInput = {
@@ -4616,6 +4653,7 @@ export type PublicArtifacts = {
4616
4653
  export type PublishUpdateGroupInput = {
4617
4654
  awaitingCodeSigningInfo?: InputMaybe<Scalars['Boolean']['input']>;
4618
4655
  branchId: Scalars['String']['input'];
4656
+ environment?: InputMaybe<EnvironmentVariableEnvironment>;
4619
4657
  excludedAssets?: InputMaybe<Array<PartialManifestAsset>>;
4620
4658
  fingerprintInfoGroup?: InputMaybe<FingerprintInfoGroup>;
4621
4659
  gitCommitHash?: InputMaybe<Scalars['String']['input']>;
@@ -4643,6 +4681,7 @@ export type RequestsFilters = {
4643
4681
  hasCustomDomainOrigin?: InputMaybe<Scalars['Boolean']['input']>;
4644
4682
  isAsset?: InputMaybe<Scalars['Boolean']['input']>;
4645
4683
  isCrash?: InputMaybe<Scalars['Boolean']['input']>;
4684
+ isLimitExceeded?: InputMaybe<Scalars['Boolean']['input']>;
4646
4685
  isVerifiedBot?: InputMaybe<Scalars['Boolean']['input']>;
4647
4686
  method?: InputMaybe<Array<RequestMethod>>;
4648
4687
  os?: InputMaybe<Array<UserAgentOs>>;
@@ -4710,8 +4749,11 @@ export type Robot = Actor & {
4710
4749
  */
4711
4750
  featureGates: Scalars['JSONObject']['output'];
4712
4751
  firstName?: Maybe<Scalars['String']['output']>;
4752
+ /** GitHub App Installations that manage this actor */
4753
+ githubAppInstallations: Array<GitHubAppInstallation>;
4713
4754
  id: Scalars['ID']['output'];
4714
4755
  isExpoAdmin: Scalars['Boolean']['output'];
4756
+ isManagedByGitHubApp: Scalars['Boolean']['output'];
4715
4757
  lastDeletionAttemptTime?: Maybe<Scalars['DateTime']['output']>;
4716
4758
  };
4717
4759
  /** Represents a robot (not human) actor. */
@@ -5388,7 +5430,7 @@ export declare enum SubmissionAndroidTrack {
5388
5430
  Production = "PRODUCTION"
5389
5431
  }
5390
5432
  export type SubmissionArchiveSourceInput = {
5391
- /** Required if the archive source type is GCS_BUILD_APPLICATION_ARCHIVE or GCS_SUBMIT_ARCHIVE */
5433
+ /** Required if the archive source type is GCS_BUILD_APPLICATION_ARCHIVE, GCS_BUILD_APPLICATION_ARCHIVE_ORCHESTRATOR or GCS_SUBMIT_ARCHIVE */
5392
5434
  bucketKey?: InputMaybe<Scalars['String']['input']>;
5393
5435
  type: SubmissionArchiveSourceType;
5394
5436
  /** Required if the archive source type is URL */
@@ -5396,6 +5438,7 @@ export type SubmissionArchiveSourceInput = {
5396
5438
  };
5397
5439
  export declare enum SubmissionArchiveSourceType {
5398
5440
  GcsBuildApplicationArchive = "GCS_BUILD_APPLICATION_ARCHIVE",
5441
+ GcsBuildApplicationArchiveOrchestrator = "GCS_BUILD_APPLICATION_ARCHIVE_ORCHESTRATOR",
5399
5442
  GcsSubmitArchive = "GCS_SUBMIT_ARCHIVE",
5400
5443
  Url = "URL"
5401
5444
  }
@@ -5525,6 +5568,7 @@ export type Update = ActivityTimelineProjectActivity & {
5525
5568
  codeSigningInfo?: Maybe<CodeSigningInfo>;
5526
5569
  createdAt: Scalars['DateTime']['output'];
5527
5570
  deployments: DeploymentResult;
5571
+ environment?: Maybe<EnvironmentVariableEnvironment>;
5528
5572
  expoGoSDKVersion?: Maybe<Scalars['String']['output']>;
5529
5573
  fingerprint?: Maybe<Fingerprint>;
5530
5574
  gitCommitHash?: Maybe<Scalars['String']['output']>;
@@ -6435,6 +6479,7 @@ export type WorkerDeployment = ActivityTimelineProjectActivity & {
6435
6479
  activityTimestamp: Scalars['DateTime']['output'];
6436
6480
  actor?: Maybe<Actor>;
6437
6481
  aliases?: Maybe<Array<WorkerDeploymentAlias>>;
6482
+ app: App;
6438
6483
  crashes?: Maybe<WorkerDeploymentCrashes>;
6439
6484
  createdAt: Scalars['DateTime']['output'];
6440
6485
  deploymentDomain: Scalars['String']['output'];
@@ -6445,7 +6490,6 @@ export type WorkerDeployment = ActivityTimelineProjectActivity & {
6445
6490
  logs?: Maybe<WorkerDeploymentLogs>;
6446
6491
  requests?: Maybe<WorkerDeploymentRequests>;
6447
6492
  subdomain: Scalars['String']['output'];
6448
- tier?: Maybe<WorkerDeploymentTier>;
6449
6493
  url: Scalars['String']['output'];
6450
6494
  };
6451
6495
  export type WorkerDeploymentCrashesArgs = {
@@ -6488,9 +6532,18 @@ export type WorkerDeploymentCrashEdge = {
6488
6532
  node: WorkerDeploymentCrashNode;
6489
6533
  request?: Maybe<WorkerDeploymentRequestNode>;
6490
6534
  };
6535
+ export declare enum WorkerDeploymentCrashKind {
6536
+ ExceededCpu = "EXCEEDED_CPU",
6537
+ ExceededMemory = "EXCEEDED_MEMORY",
6538
+ ExceededSubrequests = "EXCEEDED_SUBREQUESTS",
6539
+ Generic = "GENERIC",
6540
+ Internal = "INTERNAL",
6541
+ ResponseStreamDisconnected = "RESPONSE_STREAM_DISCONNECTED"
6542
+ }
6491
6543
  export type WorkerDeploymentCrashNode = {
6492
6544
  __typename?: 'WorkerDeploymentCrashNode';
6493
6545
  crashHash: Scalars['ID']['output'];
6546
+ crashKind: WorkerDeploymentCrashKind;
6494
6547
  crashTimestamp: Scalars['DateTime']['output'];
6495
6548
  deploymentIdentifier: Scalars['String']['output'];
6496
6549
  firstStackLine?: Maybe<Scalars['String']['output']>;
@@ -6588,6 +6641,7 @@ export type WorkerDeploymentRequestNode = {
6588
6641
  hasCustomDomainOrigin: Scalars['Boolean']['output'];
6589
6642
  isAsset: Scalars['Boolean']['output'];
6590
6643
  isCrash: Scalars['Boolean']['output'];
6644
+ isLimitExceeded: Scalars['Boolean']['output'];
6591
6645
  isRejected: Scalars['Boolean']['output'];
6592
6646
  isStaleIfError: Scalars['Boolean']['output'];
6593
6647
  isStaleWhileRevalidate: Scalars['Boolean']['output'];
@@ -6680,6 +6734,8 @@ export type WorkerDeploymentRequestsAggregationNode = {
6680
6734
  durationP50: Scalars['Float']['output'];
6681
6735
  durationP90: Scalars['Float']['output'];
6682
6736
  durationP99: Scalars['Float']['output'];
6737
+ limitExceededPerMs?: Maybe<Scalars['Float']['output']>;
6738
+ limitExceededSum: Scalars['Int']['output'];
6683
6739
  requestsPerMs?: Maybe<Scalars['Float']['output']>;
6684
6740
  requestsSum: Scalars['Int']['output'];
6685
6741
  sampleRate?: Maybe<Scalars['Float']['output']>;
@@ -6745,10 +6801,6 @@ export type WorkerDeploymentRequestsTimeseriesEdge = {
6745
6801
  node?: Maybe<WorkerDeploymentRequestsAggregationNode>;
6746
6802
  timestamp: Scalars['DateTime']['output'];
6747
6803
  };
6748
- export declare enum WorkerDeploymentTier {
6749
- Free = "FREE",
6750
- Paid = "PAID"
6751
- }
6752
6804
  export type WorkerDeploymentsConnection = {
6753
6805
  __typename?: 'WorkerDeploymentsConnection';
6754
6806
  edges: Array<WorkerDeploymentEdge>;
@@ -6836,6 +6888,7 @@ export declare enum WorkflowJobType {
6836
6888
  AppleDeviceRegistrationRequest = "APPLE_DEVICE_REGISTRATION_REQUEST",
6837
6889
  Build = "BUILD",
6838
6890
  Custom = "CUSTOM",
6891
+ Deploy = "DEPLOY",
6839
6892
  GetBuild = "GET_BUILD",
6840
6893
  MaestroTest = "MAESTRO_TEST",
6841
6894
  RequireApproval = "REQUIRE_APPROVAL",
@@ -6844,6 +6897,7 @@ export declare enum WorkflowJobType {
6844
6897
  }
6845
6898
  export type WorkflowProjectSourceInput = {
6846
6899
  easJsonBucketKey: Scalars['String']['input'];
6900
+ packageJsonBucketKey?: InputMaybe<Scalars['String']['input']>;
6847
6901
  projectArchiveBucketKey: Scalars['String']['input'];
6848
6902
  type: WorkflowProjectSourceType;
6849
6903
  };
@@ -8,7 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.Feature = exports.Experiment = exports.EnvironmentVariableVisibility = exports.EnvironmentVariableScope = exports.EnvironmentVariableEnvironment = exports.EnvironmentSecretType = exports.EntityTypeName = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildWaiverType = exports.EasBuildDeprecationInfoType = exports.EasBuildBillingResourceClass = exports.DistributionType = exports.CustomDomainStatus = exports.CustomDomainDnsRecordType = exports.CrashSampleFor = exports.ContinentCode = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildRetryDisabledReason = exports.BuildResourceClass = exports.BuildPriority = exports.BuildPhase = exports.BuildMode = exports.BuildLimitThresholdExceededMetadataType = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.BackgroundJobState = exports.BackgroundJobResultType = exports.AuthProviderIdentifier = exports.AuthProtocolType = exports.AuditLogsExportFormat = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleTeamType = exports.AppleDeviceClass = exports.AppUploadSessionType = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AppInternalDistributionBuildPrivacy = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = exports.AccountUploadSessionType = exports.AccountAppsSortByField = void 0;
10
10
  exports.UsageMetricType = exports.UploadSessionType = exports.TargetEntityMutationType = exports.SubmissionStatus = exports.SubmissionPriority = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ResponseType = exports.ResponseStatusType = exports.ResponseCacheStatus = exports.ResourceClassExperiment = exports.RequestsOrderByField = exports.RequestsOrderByDirection = exports.RequestMethod = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OnboardingEnvironment = exports.OnboardingDeviceType = exports.OfferType = exports.NotificationType = exports.NotificationEvent = exports.MailchimpTag = exports.MailchimpAudience = exports.JobRunStatus = exports.JobRunPriority = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.InsightsFilterType = exports.GitHubJobRunTriggerType = exports.GitHubJobRunTriggerRunStatus = exports.GitHubJobRunJobType = exports.GitHubBuildTriggerType = exports.GitHubBuildTriggerRunStatus = exports.GitHubBuildTriggerExecutionBehavior = exports.GitHubAppInstallationStatus = exports.GitHubAppEnvironment = exports.FingerprintSourceType = void 0;
11
- exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkerLoggerLevel = exports.WorkerDeploymentTier = exports.WorkerDeploymentLogLevel = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = void 0;
11
+ exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = void 0;
12
12
  var AccountAppsSortByField;
13
13
  (function (AccountAppsSortByField) {
14
14
  AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
@@ -710,6 +710,7 @@ var SubmissionAndroidTrack;
710
710
  var SubmissionArchiveSourceType;
711
711
  (function (SubmissionArchiveSourceType) {
712
712
  SubmissionArchiveSourceType["GcsBuildApplicationArchive"] = "GCS_BUILD_APPLICATION_ARCHIVE";
713
+ SubmissionArchiveSourceType["GcsBuildApplicationArchiveOrchestrator"] = "GCS_BUILD_APPLICATION_ARCHIVE_ORCHESTRATOR";
713
714
  SubmissionArchiveSourceType["GcsSubmitArchive"] = "GCS_SUBMIT_ARCHIVE";
714
715
  SubmissionArchiveSourceType["Url"] = "URL";
715
716
  })(SubmissionArchiveSourceType || (exports.SubmissionArchiveSourceType = SubmissionArchiveSourceType = {}));
@@ -805,6 +806,15 @@ var WebhookType;
805
806
  WebhookType["Build"] = "BUILD";
806
807
  WebhookType["Submit"] = "SUBMIT";
807
808
  })(WebhookType || (exports.WebhookType = WebhookType = {}));
809
+ var WorkerDeploymentCrashKind;
810
+ (function (WorkerDeploymentCrashKind) {
811
+ WorkerDeploymentCrashKind["ExceededCpu"] = "EXCEEDED_CPU";
812
+ WorkerDeploymentCrashKind["ExceededMemory"] = "EXCEEDED_MEMORY";
813
+ WorkerDeploymentCrashKind["ExceededSubrequests"] = "EXCEEDED_SUBREQUESTS";
814
+ WorkerDeploymentCrashKind["Generic"] = "GENERIC";
815
+ WorkerDeploymentCrashKind["Internal"] = "INTERNAL";
816
+ WorkerDeploymentCrashKind["ResponseStreamDisconnected"] = "RESPONSE_STREAM_DISCONNECTED";
817
+ })(WorkerDeploymentCrashKind || (exports.WorkerDeploymentCrashKind = WorkerDeploymentCrashKind = {}));
808
818
  var WorkerDeploymentLogLevel;
809
819
  (function (WorkerDeploymentLogLevel) {
810
820
  WorkerDeploymentLogLevel["Debug"] = "DEBUG";
@@ -814,11 +824,6 @@ var WorkerDeploymentLogLevel;
814
824
  WorkerDeploymentLogLevel["Log"] = "LOG";
815
825
  WorkerDeploymentLogLevel["Warn"] = "WARN";
816
826
  })(WorkerDeploymentLogLevel || (exports.WorkerDeploymentLogLevel = WorkerDeploymentLogLevel = {}));
817
- var WorkerDeploymentTier;
818
- (function (WorkerDeploymentTier) {
819
- WorkerDeploymentTier["Free"] = "FREE";
820
- WorkerDeploymentTier["Paid"] = "PAID";
821
- })(WorkerDeploymentTier || (exports.WorkerDeploymentTier = WorkerDeploymentTier = {}));
822
827
  var WorkerLoggerLevel;
823
828
  (function (WorkerLoggerLevel) {
824
829
  WorkerLoggerLevel["Debug"] = "DEBUG";
@@ -844,6 +849,7 @@ var WorkflowJobType;
844
849
  WorkflowJobType["AppleDeviceRegistrationRequest"] = "APPLE_DEVICE_REGISTRATION_REQUEST";
845
850
  WorkflowJobType["Build"] = "BUILD";
846
851
  WorkflowJobType["Custom"] = "CUSTOM";
852
+ WorkflowJobType["Deploy"] = "DEPLOY";
847
853
  WorkflowJobType["GetBuild"] = "GET_BUILD";
848
854
  WorkflowJobType["MaestroTest"] = "MAESTRO_TEST";
849
855
  WorkflowJobType["RequireApproval"] = "REQUIRE_APPROVAL";
@@ -14,17 +14,17 @@ export declare namespace WorkflowRevisionMutation {
14
14
  fieldErrors: Record<string, string[]>;
15
15
  }>;
16
16
  }, "strip", z.ZodTypeAny, {
17
- errorCode: "VALIDATION_ERROR";
18
17
  metadata: {
19
18
  formErrors: string[];
20
19
  fieldErrors: Record<string, string[]>;
21
20
  };
22
- }, {
23
21
  errorCode: "VALIDATION_ERROR";
22
+ }, {
24
23
  metadata: {
25
24
  formErrors: string[];
26
25
  fieldErrors: Record<string, string[]>;
27
26
  };
27
+ errorCode: "VALIDATION_ERROR";
28
28
  }>;
29
29
  function validateWorkflowYamlConfigAsync(graphqlClient: ExpoGraphqlClient, { appId, yamlConfig, }: {
30
30
  appId: string;
@@ -51,13 +51,13 @@ async function fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync(graph
51
51
  }
52
52
  const projectDashboardUrl = (0, url_1.getProjectDashboardUrl)(accountName, projectName);
53
53
  const projectLink = (0, log_1.link)(projectDashboardUrl, { text: projectFullName });
54
- const spinner = (0, ora_1.ora)(`Creating ${chalk_1.default.bold(projectFullName)} on Expo`).start();
54
+ const spinner = (0, ora_1.ora)(`Creating ${chalk_1.default.bold(projectFullName)} on EAS`).start();
55
55
  try {
56
56
  const id = await AppMutation_1.AppMutation.createAppAsync(graphqlClient, {
57
57
  accountId: account.id,
58
58
  projectName,
59
59
  });
60
- spinner.succeed(`Created ${chalk_1.default.bold(projectLink)} on Expo`);
60
+ spinner.succeed(`Created ${chalk_1.default.bold(projectLink)} on EAS`);
61
61
  return id;
62
62
  }
63
63
  catch (err) {