eas-cli 3.5.2 → 3.6.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.
@@ -39,7 +39,7 @@ This means that it will most likely produce an AAB and you will not be able to i
39
39
  await (0, validate_1.validatePNGsForManagedProjectAsync)(ctx);
40
40
  const gradleContext = await (0, gradle_1.resolveGradleBuildContextAsync)(ctx.projectDir, buildProfile);
41
41
  if (ctx.workflow === eas_build_job_1.Workflow.MANAGED) {
42
- await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)(ctx.projectDir, ctx.exp, ctx.user);
42
+ await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)(ctx);
43
43
  }
44
44
  const applicationId = await (0, applicationId_1.getApplicationIdAsync)(ctx.projectDir, ctx.exp, gradleContext);
45
45
  const versionCodeOverride = ((_b = ctx.easJsonCliConfig) === null || _b === void 0 ? void 0 : _b.appVersionSource) === eas_json_1.AppVersionSource.REMOTE
@@ -19,7 +19,7 @@ async function createIosContextAsync(ctx) {
19
19
  var _a;
20
20
  const { buildProfile } = ctx;
21
21
  if (ctx.workflow === eas_build_job_1.Workflow.MANAGED) {
22
- await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)(ctx.projectDir, ctx.exp, ctx.user);
22
+ await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)(ctx);
23
23
  }
24
24
  (0, validate_1.checkNodeEnvVariable)(ctx);
25
25
  await (0, validate_1.checkGoogleServicesFileAsync)(ctx);
@@ -37,6 +37,10 @@ function formatGraphQLBuild(build) {
37
37
  }
38
38
  },
39
39
  },
40
+ {
41
+ label: 'Message',
42
+ value: build.message,
43
+ },
40
44
  {
41
45
  label: 'Distribution',
42
46
  value: (_a = build.distribution) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
@@ -10,6 +10,7 @@ const ora_1 = require("../../../ora");
10
10
  const expoConfig_1 = require("../../../project/expoConfig");
11
11
  const fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync_1 = require("../../../project/fetchOrCreateProjectIDForWriteToConfigWithConfirmationAsync");
12
12
  const projectUtils_1 = require("../../../project/projectUtils");
13
+ const User_1 = require("../../../user/User");
13
14
  const createGraphqlClient_1 = require("./createGraphqlClient");
14
15
  const findProjectDirAndVerifyProjectSetupAsync_1 = require("./findProjectDirAndVerifyProjectSetupAsync");
15
16
  /**
@@ -68,7 +69,11 @@ async function getProjectIdAsync(sessionManager, exp, options) {
68
69
  // check that the local project ID matches account and slug
69
70
  const appForProjectId = await AppQuery_1.AppQuery.byIdAsync(graphqlClient, localProjectId);
70
71
  if (exp.owner && exp.owner !== appForProjectId.ownerAccount.name) {
71
- throw new Error(`Project config: Project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) is not owned by owner specified in the "owner" field (${exp.owner}). ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
72
+ throw new Error(`Project config: Owner of project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) does not match owner specified in the "owner" field (${exp.owner}). ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
73
+ }
74
+ const actorUsername = (0, User_1.getActorUsername)(actor);
75
+ if (!exp.owner && appForProjectId.ownerAccount.name !== actorUsername) {
76
+ throw new Error(`Project config: Owner of project identified by "extra.eas.projectId" (${appForProjectId.ownerAccount.name}) does not match the logged in user (${actorUsername}) and the "owner" field is not specified. To ensure all libraries work correctly, "owner": "${appForProjectId.ownerAccount.name}" should be added to the project config, which can be done automatically by re-running "eas init". ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
72
77
  }
73
78
  if (exp.slug && exp.slug !== appForProjectId.slug) {
74
79
  throw new Error(`Project config: Slug for project identified by "extra.eas.projectId" (${appForProjectId.slug}) does not match the "slug" field (${exp.slug}). ${(0, log_1.learnMore)('https://expo.fyi/eas-project-id')}`);
@@ -23,7 +23,7 @@ class BuildVersionSetView extends EasCommand_1.default {
23
23
  async runAsync() {
24
24
  var _b, _c, _d;
25
25
  const { flags } = await this.parse(BuildVersionSetView);
26
- const { loggedIn: { actor, graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSetView, {
26
+ const { loggedIn: { graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSetView, {
27
27
  nonInteractive: false,
28
28
  });
29
29
  const platform = await (0, platform_1.selectPlatformAsync)(flags.platform);
@@ -33,7 +33,14 @@ class BuildVersionSetView extends EasCommand_1.default {
33
33
  const { exp, projectId } = await getDynamicProjectConfigAsync({ env: profile.env });
34
34
  const displayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
35
35
  (0, remoteVersionSource_1.validateAppConfigForRemoteVersionSource)(exp, platform);
36
- const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)(projectDir, exp, profile, platform, actor);
36
+ const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)({
37
+ graphqlClient,
38
+ projectDir,
39
+ projectId,
40
+ exp,
41
+ buildProfile: profile,
42
+ platform,
43
+ });
37
44
  const remoteVersions = await AppVersionQuery_1.AppVersionQuery.latestVersionAsync(graphqlClient, projectId, (0, AppPlatform_1.toAppPlatform)(platform), applicationIdentifier);
38
45
  const currentStateMessage = (remoteVersions === null || remoteVersions === void 0 ? void 0 : remoteVersions.buildVersion)
39
46
  ? `Project ${chalk_1.default.bold(displayName)} with ${getApplicationIdentifierName(platform)} "${applicationIdentifier}" is configured with ${(0, remoteVersionSource_1.getBuildVersionName)(platform)} ${remoteVersions.buildVersion}.`
@@ -26,7 +26,7 @@ class BuildVersionSyncView extends EasCommand_1.default {
26
26
  async runAsync() {
27
27
  var _b;
28
28
  const { flags } = await this.parse(BuildVersionSyncView);
29
- const { loggedIn: { actor, graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSyncView, {
29
+ const { loggedIn: { graphqlClient }, getDynamicProjectConfigAsync, projectDir, } = await this.getContextAsync(BuildVersionSyncView, {
30
30
  nonInteractive: true,
31
31
  });
32
32
  const requestedPlatform = await (0, platform_1.selectRequestedPlatformAsync)(flags.platform);
@@ -45,7 +45,14 @@ class BuildVersionSyncView extends EasCommand_1.default {
45
45
  });
46
46
  (0, remoteVersionSource_1.validateAppConfigForRemoteVersionSource)(exp, profileInfo.platform);
47
47
  const platformDisplayName = platform_1.appPlatformDisplayNames[(0, AppPlatform_1.toAppPlatform)(profileInfo.platform)];
48
- const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)(projectDir, exp, profileInfo.profile, profileInfo.platform, actor);
48
+ const applicationIdentifier = await (0, applicationIdentifier_1.getApplicationIdentifierAsync)({
49
+ graphqlClient,
50
+ projectDir,
51
+ projectId,
52
+ exp,
53
+ buildProfile: profileInfo.profile,
54
+ platform: profileInfo.platform,
55
+ });
49
56
  const remoteVersions = await AppVersionQuery_1.AppVersionQuery.latestVersionAsync(graphqlClient, projectId, (0, AppPlatform_1.toAppPlatform)(profileInfo.platform), applicationIdentifier);
50
57
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, profileInfo.platform);
51
58
  if (!(remoteVersions === null || remoteVersions === void 0 ? void 0 : remoteVersions.buildVersion)) {
@@ -122,15 +122,11 @@ class ProjectInit extends EasCommand_1.default {
122
122
  await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, projectId);
123
123
  }
124
124
  }
125
- static async initializeWithExplicitIDAsync(graphqlClient, projectId, projectDir, { force, nonInteractive }) {
125
+ static async initializeWithExplicitIDAsync(projectId, projectDir, { force, nonInteractive }) {
126
126
  await this.setExplicitIDAsync(projectId, projectDir, {
127
127
  force,
128
128
  nonInteractive,
129
129
  });
130
- await this.ensureOwnerSlugConsistencyAsync(graphqlClient, projectId, projectDir, {
131
- force,
132
- nonInteractive,
133
- });
134
130
  }
135
131
  static async initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir) {
136
132
  var _c, _d, _e;
@@ -138,7 +134,7 @@ class ProjectInit extends EasCommand_1.default {
138
134
  const existingProjectId = (_d = (_c = exp.extra) === null || _c === void 0 ? void 0 : _c.eas) === null || _d === void 0 ? void 0 : _d.projectId;
139
135
  if (existingProjectId) {
140
136
  log_1.default.succeed(`Project already linked (ID: ${chalk_1.default.bold(existingProjectId)}). To re-configure, remove the "extra.eas.projectId" field from your app config.`);
141
- return;
137
+ return existingProjectId;
142
138
  }
143
139
  const allAccounts = actor.accounts;
144
140
  const accountNamesWhereUserHasSufficientPermissionsToCreateApp = new Set(allAccounts
@@ -184,7 +180,7 @@ class ProjectInit extends EasCommand_1.default {
184
180
  throw new Error(`Project ID configuration canceled. Re-run the command to select a different account/project.`);
185
181
  }
186
182
  await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, existingProjectIdOnServer);
187
- return;
183
+ return existingProjectIdOnServer;
188
184
  }
189
185
  if (!accountNamesWhereUserHasSufficientPermissionsToCreateApp.has(accountName)) {
190
186
  throw new Error(`You don't have permission to create a new project on the ${accountName} account and no matching project already exists on the account.`);
@@ -213,19 +209,26 @@ class ProjectInit extends EasCommand_1.default {
213
209
  throw err;
214
210
  }
215
211
  await ProjectInit.saveProjectIdAndLogSuccessAsync(projectDir, createdProjectId);
212
+ return createdProjectId;
216
213
  }
217
214
  async runAsync() {
218
- const { flags: { id, force, 'non-interactive': nonInteractive }, } = await this.parse(ProjectInit);
215
+ const { flags: { id: idArgument, force, 'non-interactive': nonInteractive }, } = await this.parse(ProjectInit);
219
216
  const { loggedIn: { actor, graphqlClient }, projectDir, } = await this.getContextAsync(ProjectInit, { nonInteractive });
220
- if (id) {
221
- await ProjectInit.initializeWithExplicitIDAsync(graphqlClient, id, projectDir, {
217
+ let idForConsistency;
218
+ if (idArgument) {
219
+ await ProjectInit.initializeWithExplicitIDAsync(idArgument, projectDir, {
222
220
  force,
223
221
  nonInteractive,
224
222
  });
223
+ idForConsistency = idArgument;
225
224
  }
226
225
  else {
227
- await ProjectInit.initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir);
226
+ idForConsistency = await ProjectInit.initializeWithInteractiveSelectionAsync(graphqlClient, actor, projectDir);
228
227
  }
228
+ await ProjectInit.ensureOwnerSlugConsistencyAsync(graphqlClient, idForConsistency, projectDir, {
229
+ force,
230
+ nonInteractive,
231
+ });
229
232
  }
230
233
  }
231
234
  exports.default = ProjectInit;
@@ -421,6 +421,7 @@ export type AccountUsageMetricAndCost = {
421
421
  /** The limit, in units, allowed by this plan */
422
422
  limit: Scalars['Float'];
423
423
  metricType: UsageMetricType;
424
+ service: EasService;
424
425
  serviceMetric: EasServiceMetric;
425
426
  /** Total cost of this particular metric, in cents */
426
427
  totalCost: Scalars['Float'];
@@ -433,6 +434,7 @@ export type AccountUsageMetrics = {
433
434
  };
434
435
  export type AccountUsageMetricsByBillingPeriodArgs = {
435
436
  date: Scalars['DateTime'];
437
+ service?: InputMaybe<EasService>;
436
438
  };
437
439
  export type AccountUsageMetricsMetricsForServiceMetricArgs = {
438
440
  filterParams?: InputMaybe<Scalars['JSONObject']>;
@@ -848,6 +850,8 @@ export type App = Project & {
848
850
  slug: Scalars['String'];
849
851
  /** EAS Submissions associated with this app */
850
852
  submissions: Array<Submission>;
853
+ /** Coalesced project activity for an app using pagination */
854
+ timelineActivity: TimelineActivityConnection;
851
855
  /** @deprecated 'likes' have been deprecated. */
852
856
  trendScore: Scalars['Float'];
853
857
  /** get an EAS branch owned by the app by name */
@@ -957,6 +961,14 @@ export type AppSubmissionsArgs = {
957
961
  offset: Scalars['Int'];
958
962
  };
959
963
  /** Represents an Exponent App (or Experience in legacy terms) */
964
+ export type AppTimelineActivityArgs = {
965
+ after?: InputMaybe<Scalars['String']>;
966
+ before?: InputMaybe<Scalars['String']>;
967
+ filter?: InputMaybe<TimelineActivityFilterInput>;
968
+ first?: InputMaybe<Scalars['Int']>;
969
+ last?: InputMaybe<Scalars['Int']>;
970
+ };
971
+ /** Represents an Exponent App (or Experience in legacy terms) */
960
972
  export type AppUpdateBranchByNameArgs = {
961
973
  name: Scalars['String'];
962
974
  };
@@ -2107,6 +2119,10 @@ export declare enum EasBuildDeprecationInfoType {
2107
2119
  UserFacing = "USER_FACING"
2108
2120
  }
2109
2121
  export type EasBuildOrClassicBuildJob = Build | BuildJob;
2122
+ export declare enum EasService {
2123
+ Builds = "BUILDS",
2124
+ Updates = "UPDATES"
2125
+ }
2110
2126
  export declare enum EasServiceMetric {
2111
2127
  AssetsRequests = "ASSETS_REQUESTS",
2112
2128
  BandwidthUsage = "BANDWIDTH_USAGE",
@@ -3174,6 +3190,8 @@ export type RootQuery = {
3174
3190
  updatesByGroup: Array<Update>;
3175
3191
  /** Top-level query object for querying Users. */
3176
3192
  user: UserQuery;
3193
+ /** Top-level query object for querying UserActors. */
3194
+ userActor: UserActorQuery;
3177
3195
  /** @deprecated Use 'byId' field under 'user'. */
3178
3196
  userByUserId?: Maybe<User>;
3179
3197
  /** @deprecated Use 'byUsername' field under 'user'. */
@@ -3225,6 +3243,7 @@ export type SsoUser = Actor & UserActor & {
3225
3243
  appetizeCode?: Maybe<Scalars['String']>;
3226
3244
  /** Apps this user has published. If this user is the viewer, this field returns the apps the user has access to. */
3227
3245
  apps: Array<App>;
3246
+ bestContactEmail?: Maybe<Scalars['String']>;
3228
3247
  created: Scalars['DateTime'];
3229
3248
  displayName: Scalars['String'];
3230
3249
  /**
@@ -3240,6 +3259,7 @@ export type SsoUser = Actor & UserActor & {
3240
3259
  isExpoAdmin: Scalars['Boolean'];
3241
3260
  lastName?: Maybe<Scalars['String']>;
3242
3261
  location?: Maybe<Scalars['String']>;
3262
+ notificationSubscriptions: Array<NotificationSubscription>;
3243
3263
  /** Associated accounts */
3244
3264
  primaryAccount: Account;
3245
3265
  profilePhoto: Scalars['String'];
@@ -3265,6 +3285,10 @@ export type SsoUserFeatureGatesArgs = {
3265
3285
  filter?: InputMaybe<Array<Scalars['String']>>;
3266
3286
  };
3267
3287
  /** Represents a human SSO (not robot) actor. */
3288
+ export type SsoUserNotificationSubscriptionsArgs = {
3289
+ filter?: InputMaybe<NotificationSubscriptionFilter>;
3290
+ };
3291
+ /** Represents a human SSO (not robot) actor. */
3268
3292
  export type SsoUserSnacksArgs = {
3269
3293
  limit: Scalars['Int'];
3270
3294
  offset: Scalars['Int'];
@@ -3603,6 +3627,22 @@ export type SubscriptionDetails = {
3603
3627
  export type SubscriptionDetailsPlanEnablementArgs = {
3604
3628
  serviceMetric: EasServiceMetric;
3605
3629
  };
3630
+ export type TimelineActivityConnection = {
3631
+ __typename?: 'TimelineActivityConnection';
3632
+ edges: Array<TimelineActivityEdge>;
3633
+ pageInfo: PageInfo;
3634
+ };
3635
+ export type TimelineActivityEdge = {
3636
+ __typename?: 'TimelineActivityEdge';
3637
+ cursor: Scalars['String'];
3638
+ node: ActivityTimelineProjectActivity;
3639
+ };
3640
+ export type TimelineActivityFilterInput = {
3641
+ channels?: InputMaybe<Array<Scalars['String']>>;
3642
+ platforms?: InputMaybe<Array<AppPlatform>>;
3643
+ releaseChannels?: InputMaybe<Array<Scalars['String']>>;
3644
+ types?: InputMaybe<Array<ActivityTimelineProjectActivityType>>;
3645
+ };
3606
3646
  export type UnsubscribeFromNotificationResult = {
3607
3647
  __typename?: 'UnsubscribeFromNotificationResult';
3608
3648
  notificationSubscription: NotificationSubscription;
@@ -3799,6 +3839,7 @@ export type User = Actor & UserActor & {
3799
3839
  appetizeCode?: Maybe<Scalars['String']>;
3800
3840
  /** Apps this user has published */
3801
3841
  apps: Array<App>;
3842
+ bestContactEmail?: Maybe<Scalars['String']>;
3802
3843
  created: Scalars['DateTime'];
3803
3844
  displayName: Scalars['String'];
3804
3845
  email?: Maybe<Scalars['String']>;
@@ -3871,6 +3912,7 @@ export type UserActor = {
3871
3912
  appetizeCode?: Maybe<Scalars['String']>;
3872
3913
  /** Apps this user has published */
3873
3914
  apps: Array<App>;
3915
+ bestContactEmail?: Maybe<Scalars['String']>;
3874
3916
  created: Scalars['DateTime'];
3875
3917
  /**
3876
3918
  * Best-effort human readable name for this human actor for use in user interfaces during action attribution.
@@ -3890,6 +3932,7 @@ export type UserActor = {
3890
3932
  isExpoAdmin: Scalars['Boolean'];
3891
3933
  lastName?: Maybe<Scalars['String']>;
3892
3934
  location?: Maybe<Scalars['String']>;
3935
+ notificationSubscriptions: Array<NotificationSubscription>;
3893
3936
  /** Associated accounts */
3894
3937
  primaryAccount: Account;
3895
3938
  profilePhoto: Scalars['String'];
@@ -3915,10 +3958,27 @@ export type UserActorFeatureGatesArgs = {
3915
3958
  filter?: InputMaybe<Array<Scalars['String']>>;
3916
3959
  };
3917
3960
  /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3961
+ export type UserActorNotificationSubscriptionsArgs = {
3962
+ filter?: InputMaybe<NotificationSubscriptionFilter>;
3963
+ };
3964
+ /** A human user (type User or SSOUser) that can login to the Expo website, use Expo services, and be a member of accounts. */
3918
3965
  export type UserActorSnacksArgs = {
3919
3966
  limit: Scalars['Int'];
3920
3967
  offset: Scalars['Int'];
3921
3968
  };
3969
+ export type UserActorQuery = {
3970
+ __typename?: 'UserActorQuery';
3971
+ /** Query a UserActor by ID */
3972
+ byId: UserActor;
3973
+ /** Query a UserActor by username */
3974
+ byUsername: UserActor;
3975
+ };
3976
+ export type UserActorQueryByIdArgs = {
3977
+ id: Scalars['ID'];
3978
+ };
3979
+ export type UserActorQueryByUsernameArgs = {
3980
+ username: Scalars['String'];
3981
+ };
3922
3982
  export type UserDataInput = {
3923
3983
  appetizeCode?: InputMaybe<Scalars['String']>;
3924
3984
  email?: InputMaybe<Scalars['String']>;
@@ -7107,6 +7167,7 @@ export type CreateAndroidBuildMutation = {
7107
7167
  priority: BuildPriority;
7108
7168
  createdAt: any;
7109
7169
  updatedAt: any;
7170
+ message?: string | null;
7110
7171
  completedAt?: any | null;
7111
7172
  resourceClass: BuildResourceClass;
7112
7173
  error?: {
@@ -7193,6 +7254,7 @@ export type CreateIosBuildMutation = {
7193
7254
  priority: BuildPriority;
7194
7255
  createdAt: any;
7195
7256
  updatedAt: any;
7257
+ message?: string | null;
7196
7258
  completedAt?: any | null;
7197
7259
  resourceClass: BuildResourceClass;
7198
7260
  error?: {
@@ -7275,6 +7337,7 @@ export type UpdateBuildMetadataMutation = {
7275
7337
  priority: BuildPriority;
7276
7338
  createdAt: any;
7277
7339
  updatedAt: any;
7340
+ message?: string | null;
7278
7341
  completedAt?: any | null;
7279
7342
  resourceClass: BuildResourceClass;
7280
7343
  error?: {
@@ -7351,6 +7414,7 @@ export type RetryIosBuildMutation = {
7351
7414
  priority: BuildPriority;
7352
7415
  createdAt: any;
7353
7416
  updatedAt: any;
7417
+ message?: string | null;
7354
7418
  completedAt?: any | null;
7355
7419
  resourceClass: BuildResourceClass;
7356
7420
  error?: {
@@ -7946,6 +8010,7 @@ export type BuildsByIdQuery = {
7946
8010
  priority: BuildPriority;
7947
8011
  createdAt: any;
7948
8012
  updatedAt: any;
8013
+ message?: string | null;
7949
8014
  completedAt?: any | null;
7950
8015
  resourceClass: BuildResourceClass;
7951
8016
  error?: {
@@ -8021,6 +8086,7 @@ export type BuildsWithSubmissionsByIdQuery = {
8021
8086
  priority: BuildPriority;
8022
8087
  createdAt: any;
8023
8088
  updatedAt: any;
8089
+ message?: string | null;
8024
8090
  completedAt?: any | null;
8025
8091
  resourceClass: BuildResourceClass;
8026
8092
  submissions: Array<{
@@ -8136,6 +8202,7 @@ export type ViewBuildsOnAppQuery = {
8136
8202
  priority: BuildPriority;
8137
8203
  createdAt: any;
8138
8204
  updatedAt: any;
8205
+ message?: string | null;
8139
8206
  completedAt?: any | null;
8140
8207
  resourceClass: BuildResourceClass;
8141
8208
  error?: {
@@ -8835,6 +8902,7 @@ export type BuildFragment = {
8835
8902
  priority: BuildPriority;
8836
8903
  createdAt: any;
8837
8904
  updatedAt: any;
8905
+ message?: string | null;
8838
8906
  completedAt?: any | null;
8839
8907
  resourceClass: BuildResourceClass;
8840
8908
  error?: {
@@ -8901,6 +8969,7 @@ export type BuildWithSubmissionsFragment = {
8901
8969
  priority: BuildPriority;
8902
8970
  createdAt: any;
8903
8971
  updatedAt: any;
8972
+ message?: string | null;
8904
8973
  completedAt?: any | null;
8905
8974
  resourceClass: BuildResourceClass;
8906
8975
  submissions: Array<{
@@ -6,8 +6,8 @@
6
6
  * For more info and docs, visit https://graphql-code-generator.com/
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OfferType = exports.NotificationType = exports.NotificationEvent = exports.MailchimpTag = exports.MailchimpAudience = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.GitHubAppInstallationStatus = exports.GitHubAppEnvironment = exports.Feature = exports.EnvironmentSecretType = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildResourceClass = exports.BuildPriority = exports.BuildMode = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AuthProtocolType = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
10
- exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = void 0;
9
+ exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OfferType = exports.NotificationType = exports.NotificationEvent = exports.MailchimpTag = exports.MailchimpAudience = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.GitHubAppInstallationStatus = exports.GitHubAppEnvironment = exports.Feature = exports.EnvironmentSecretType = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildDeprecationInfoType = exports.DistributionType = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildResourceClass = exports.BuildPriority = exports.BuildMode = exports.BuildJobStatus = exports.BuildJobLogsFormat = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.AuthProtocolType = exports.AssetMetadataStatus = exports.AppsFilter = exports.AppleDeviceClass = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppPrivacy = exports.AppPlatform = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = void 0;
10
+ exports.WebhookType = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.SubmissionStatus = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidTrack = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = void 0;
11
11
  var ActivityTimelineProjectActivityType;
12
12
  (function (ActivityTimelineProjectActivityType) {
13
13
  ActivityTimelineProjectActivityType["Build"] = "BUILD";
@@ -171,6 +171,11 @@ var EasBuildDeprecationInfoType;
171
171
  EasBuildDeprecationInfoType["Internal"] = "INTERNAL";
172
172
  EasBuildDeprecationInfoType["UserFacing"] = "USER_FACING";
173
173
  })(EasBuildDeprecationInfoType = exports.EasBuildDeprecationInfoType || (exports.EasBuildDeprecationInfoType = {}));
174
+ var EasService;
175
+ (function (EasService) {
176
+ EasService["Builds"] = "BUILDS";
177
+ EasService["Updates"] = "UPDATES";
178
+ })(EasService = exports.EasService || (exports.EasService = {}));
174
179
  var EasServiceMetric;
175
180
  (function (EasServiceMetric) {
176
181
  EasServiceMetric["AssetsRequests"] = "ASSETS_REQUESTS";
@@ -54,6 +54,7 @@ exports.BuildFragmentNode = (0, graphql_tag_1.default) `
54
54
  priority
55
55
  createdAt
56
56
  updatedAt
57
+ message
57
58
  completedAt
58
59
  resourceClass
59
60
  }
@@ -1,8 +1,13 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
- import { Actor } from '../../user/User';
2
+ import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
3
3
  import { GradleBuildContext } from './gradle';
4
4
  export declare const INVALID_APPLICATION_ID_MESSAGE = "Invalid format of Android applicationId. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.";
5
- export declare function ensureApplicationIdIsDefinedForManagedProjectAsync(projectDir: string, exp: ExpoConfig, actor: Actor): Promise<string>;
5
+ export declare function ensureApplicationIdIsDefinedForManagedProjectAsync({ graphqlClient, projectDir, projectId, exp, }: {
6
+ graphqlClient: ExpoGraphqlClient;
7
+ projectDir: string;
8
+ projectId: string;
9
+ exp: ExpoConfig;
10
+ }): Promise<string>;
6
11
  export declare class AmbiguousApplicationIdError extends Error {
7
12
  constructor(message?: string);
8
13
  }
@@ -17,7 +17,7 @@ const prompts_1 = require("../../prompts");
17
17
  const workflow_1 = require("../workflow");
18
18
  const gradleUtils = tslib_1.__importStar(require("./gradleUtils"));
19
19
  exports.INVALID_APPLICATION_ID_MESSAGE = `Invalid format of Android applicationId. Only alphanumeric characters, '.' and '_' are allowed, and each '.' must be followed by a letter.`;
20
- async function ensureApplicationIdIsDefinedForManagedProjectAsync(projectDir, exp, actor) {
20
+ async function ensureApplicationIdIsDefinedForManagedProjectAsync({ graphqlClient, projectDir, projectId, exp, }) {
21
21
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, eas_build_job_1.Platform.ANDROID);
22
22
  (0, assert_1.default)(workflow === eas_build_job_1.Workflow.MANAGED, 'This function should be called only for managed projects');
23
23
  try {
@@ -26,7 +26,7 @@ async function ensureApplicationIdIsDefinedForManagedProjectAsync(projectDir, ex
26
26
  });
27
27
  }
28
28
  catch {
29
- return await configureApplicationIdAsync(projectDir, exp, actor);
29
+ return await configureApplicationIdAsync({ graphqlClient, projectDir, projectId, exp });
30
30
  }
31
31
  }
32
32
  exports.ensureApplicationIdIsDefinedForManagedProjectAsync = ensureApplicationIdIsDefinedForManagedProjectAsync;
@@ -85,7 +85,7 @@ async function getApplicationIdAsync(projectDir, exp, gradleContext) {
85
85
  }
86
86
  }
87
87
  exports.getApplicationIdAsync = getApplicationIdAsync;
88
- async function configureApplicationIdAsync(projectDir, exp, actor) {
88
+ async function configureApplicationIdAsync({ graphqlClient, projectDir, projectId, exp, }) {
89
89
  var _a;
90
90
  const paths = (0, config_1.getConfigFilePaths)(projectDir);
91
91
  // we can't automatically update app.config.js
@@ -95,7 +95,7 @@ async function configureApplicationIdAsync(projectDir, exp, actor) {
95
95
  (0, assert_1.default)(paths.staticConfigPath, 'app.json must exist');
96
96
  log_1.default.addNewLineIfNone();
97
97
  log_1.default.log(`${chalk_1.default.bold(`📝 Android application id`)} ${chalk_1.default.dim((0, log_1.learnMore)('https://expo.fyi/android-package'))}`);
98
- const suggestedAndroidApplicationId = await getSuggestedApplicationIdAsync(exp, actor);
98
+ const suggestedAndroidApplicationId = await getSuggestedApplicationIdAsync(graphqlClient, exp, projectId);
99
99
  const { packageName } = await (0, prompts_1.promptAsync)({
100
100
  name: 'packageName',
101
101
  type: 'text',
@@ -125,7 +125,7 @@ function warnIfAndroidPackageDefinedInAppConfigForBareWorkflowProject(projectDir
125
125
  }
126
126
  }
127
127
  exports.warnIfAndroidPackageDefinedInAppConfigForBareWorkflowProject = warnIfAndroidPackageDefinedInAppConfigForBareWorkflowProject;
128
- async function getSuggestedApplicationIdAsync(exp, actor) {
128
+ async function getSuggestedApplicationIdAsync(graphqlClient, exp, projectId) {
129
129
  // Attempt to use the ios bundle id first since it's convenient to have them aligned.
130
130
  const maybeBundleId = config_plugins_1.IOSConfig.BundleIdentifier.getBundleIdentifier(exp);
131
131
  if (maybeBundleId && isApplicationIdValid(maybeBundleId)) {
@@ -133,9 +133,9 @@ async function getSuggestedApplicationIdAsync(exp, actor) {
133
133
  }
134
134
  else {
135
135
  // the only callsite is heavily interactive
136
- const username = (0, projectUtils_1.getUsername)(exp, actor);
136
+ const account = await (0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId);
137
137
  // It's common to use dashes in your node project name, strip them from the suggested package name.
138
- const possibleId = `com.${username}.${exp.slug}`.split('-').join('');
138
+ const possibleId = `com.${account.name}.${exp.slug}`.split('-').join('');
139
139
  if (isApplicationIdValid(possibleId)) {
140
140
  return possibleId;
141
141
  }
@@ -1,5 +1,12 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
2
  import { Platform } from '@expo/eas-build-job';
3
3
  import { BuildProfile } from '@expo/eas-json';
4
- import { Actor } from '../user/User';
5
- export declare function getApplicationIdentifierAsync(projectDir: string, exp: ExpoConfig, buildProfile: BuildProfile, platform: Platform, actor: Actor): Promise<string>;
4
+ import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
5
+ export declare function getApplicationIdentifierAsync({ graphqlClient, projectDir, projectId, exp, buildProfile, platform, }: {
6
+ graphqlClient: ExpoGraphqlClient;
7
+ projectDir: string;
8
+ projectId: string;
9
+ exp: ExpoConfig;
10
+ buildProfile: BuildProfile;
11
+ platform: Platform;
12
+ }): Promise<string>;
@@ -8,12 +8,17 @@ const bundleIdentifier_1 = require("./ios/bundleIdentifier");
8
8
  const scheme_1 = require("./ios/scheme");
9
9
  const target_1 = require("./ios/target");
10
10
  const workflow_1 = require("./workflow");
11
- async function getApplicationIdentifierAsync(projectDir, exp, buildProfile, platform, actor) {
11
+ async function getApplicationIdentifierAsync({ graphqlClient, projectDir, projectId, exp, buildProfile, platform, }) {
12
12
  if (platform === eas_build_job_1.Platform.ANDROID) {
13
13
  const profile = buildProfile;
14
14
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, eas_build_job_1.Platform.ANDROID);
15
15
  if (workflow === eas_build_job_1.Workflow.MANAGED) {
16
- return await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)(projectDir, exp, actor);
16
+ return await (0, applicationId_1.ensureApplicationIdIsDefinedForManagedProjectAsync)({
17
+ graphqlClient,
18
+ projectDir,
19
+ projectId,
20
+ exp,
21
+ });
17
22
  }
18
23
  const gradleContext = await (0, gradle_1.resolveGradleBuildContextAsync)(projectDir, profile);
19
24
  return await (0, applicationId_1.getApplicationIdAsync)(projectDir, exp, gradleContext);
@@ -22,7 +27,12 @@ async function getApplicationIdentifierAsync(projectDir, exp, buildProfile, plat
22
27
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, eas_build_job_1.Platform.IOS);
23
28
  const profile = buildProfile;
24
29
  if (workflow === eas_build_job_1.Workflow.MANAGED) {
25
- return await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)(projectDir, exp, actor);
30
+ return await (0, bundleIdentifier_1.ensureBundleIdentifierIsDefinedForManagedProjectAsync)({
31
+ graphqlClient,
32
+ projectDir,
33
+ projectId,
34
+ exp,
35
+ });
26
36
  }
27
37
  const xcodeBuildContext = await (0, scheme_1.resolveXcodeBuildContextAsync)({ exp, projectDir, nonInteractive: false }, profile);
28
38
  const targets = await (0, target_1.resolveTargetsAsync)({
@@ -1,7 +1,12 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
- import { Actor } from '../../user/User';
2
+ import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
3
3
  export declare const INVALID_BUNDLE_IDENTIFIER_MESSAGE = "Invalid format of iOS bundle identifier. Only alphanumeric characters, '.' and '-' are allowed, and each '.' must be followed by a letter.";
4
- export declare function ensureBundleIdentifierIsDefinedForManagedProjectAsync(projectDir: string, exp: ExpoConfig, actor: Actor): Promise<string>;
4
+ export declare function ensureBundleIdentifierIsDefinedForManagedProjectAsync({ graphqlClient, projectDir, projectId, exp, }: {
5
+ graphqlClient: ExpoGraphqlClient;
6
+ projectDir: string;
7
+ projectId: string;
8
+ exp: ExpoConfig;
9
+ }): Promise<string>;
5
10
  export declare class AmbiguousBundleIdentifierError extends Error {
6
11
  constructor(message?: string);
7
12
  }
@@ -14,14 +14,19 @@ const prompts_1 = require("../../prompts");
14
14
  const projectUtils_1 = require("../projectUtils");
15
15
  const workflow_1 = require("../workflow");
16
16
  exports.INVALID_BUNDLE_IDENTIFIER_MESSAGE = `Invalid format of iOS bundle identifier. Only alphanumeric characters, '.' and '-' are allowed, and each '.' must be followed by a letter.`;
17
- async function ensureBundleIdentifierIsDefinedForManagedProjectAsync(projectDir, exp, actor) {
17
+ async function ensureBundleIdentifierIsDefinedForManagedProjectAsync({ graphqlClient, projectDir, projectId, exp, }) {
18
18
  const workflow = await (0, workflow_1.resolveWorkflowAsync)(projectDir, eas_build_job_1.Platform.IOS);
19
19
  (0, assert_1.default)(workflow === eas_build_job_1.Workflow.MANAGED, 'This function should be called only for managed projects');
20
20
  try {
21
21
  return await getBundleIdentifierAsync(projectDir, exp);
22
22
  }
23
23
  catch {
24
- return await configureBundleIdentifierAsync(projectDir, exp, actor);
24
+ return await configureBundleIdentifierAsync({
25
+ graphqlClient,
26
+ projectDir,
27
+ exp,
28
+ projectId,
29
+ });
25
30
  }
26
31
  }
27
32
  exports.ensureBundleIdentifierIsDefinedForManagedProjectAsync = ensureBundleIdentifierIsDefinedForManagedProjectAsync;
@@ -69,7 +74,7 @@ async function getBundleIdentifierAsync(projectDir, exp, xcodeContext) {
69
74
  }
70
75
  }
71
76
  exports.getBundleIdentifierAsync = getBundleIdentifierAsync;
72
- async function configureBundleIdentifierAsync(projectDir, exp, actor) {
77
+ async function configureBundleIdentifierAsync({ graphqlClient, projectDir, projectId, exp, }) {
73
78
  var _a;
74
79
  const paths = (0, config_1.getConfigFilePaths)(projectDir);
75
80
  // we can't automatically update app.config.js
@@ -79,7 +84,7 @@ async function configureBundleIdentifierAsync(projectDir, exp, actor) {
79
84
  (0, assert_1.default)(paths.staticConfigPath, 'app.json must exist');
80
85
  log_1.default.addNewLineIfNone();
81
86
  log_1.default.log(`${chalk_1.default.bold(`📝 iOS Bundle Identifier`)} ${chalk_1.default.dim((0, log_1.learnMore)('https://expo.fyi/bundle-identifier'))}`);
82
- const suggestedBundleIdentifier = await getSuggestedBundleIdentifierAsync(exp, actor);
87
+ const suggestedBundleIdentifier = await getSuggestedBundleIdentifierAsync(graphqlClient, exp, projectId);
83
88
  const { bundleIdentifier } = await (0, prompts_1.promptAsync)({
84
89
  name: 'bundleIdentifier',
85
90
  type: 'text',
@@ -114,7 +119,7 @@ function isWildcardBundleIdentifier(bundleIdentifier) {
114
119
  return wildcardRegex.test(bundleIdentifier);
115
120
  }
116
121
  exports.isWildcardBundleIdentifier = isWildcardBundleIdentifier;
117
- async function getSuggestedBundleIdentifierAsync(exp, actor) {
122
+ async function getSuggestedBundleIdentifierAsync(graphqlClient, exp, projectId) {
118
123
  // Attempt to use the android package name first since it's convenient to have them aligned.
119
124
  const maybeAndroidPackage = config_plugins_1.AndroidConfig.Package.getPackage(exp);
120
125
  if (maybeAndroidPackage && isBundleIdentifierValid(maybeAndroidPackage)) {
@@ -122,9 +127,9 @@ async function getSuggestedBundleIdentifierAsync(exp, actor) {
122
127
  }
123
128
  else {
124
129
  // the only callsite is heavily interactive
125
- const username = (0, projectUtils_1.getUsername)(exp, actor);
130
+ const account = await (0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId);
126
131
  // It's common to use dashes in your node project name, strip them from the suggested package name.
127
- const possibleId = `com.${username}.${exp.slug}`.split('-').join('');
132
+ const possibleId = `com.${account.name}.${exp.slug}`.split('-').join('');
128
133
  if (isBundleIdentifierValid(possibleId)) {
129
134
  return possibleId;
130
135
  }