eas-cli 16.26.0 → 16.27.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.
@@ -173,15 +173,6 @@ class EnvUpdate extends EasCommand_1.default {
173
173
  newType = undefined;
174
174
  }
175
175
  }
176
- let environmentFilePath;
177
- if ((newType ?? selectedVariable.type) === generated_1.EnvironmentSecretType.FileBase64 && value) {
178
- environmentFilePath = path_1.default.resolve(value);
179
- if (!(await fs_extra_1.default.pathExists(environmentFilePath))) {
180
- throw new Error(`File "${value}" does not exist`);
181
- }
182
- fileName = path_1.default.basename(environmentFilePath);
183
- }
184
- value = environmentFilePath ? await fs_extra_1.default.readFile(environmentFilePath, 'base64') : value;
185
176
  if (!environments || environments.length === 0) {
186
177
  environments = await (0, prompts_2.promptVariableEnvironmentAsync)({
187
178
  nonInteractive,
@@ -204,6 +195,23 @@ class EnvUpdate extends EasCommand_1.default {
204
195
  }
205
196
  }
206
197
  }
198
+ // If value is provided but type is not explicitly set, preserve the existing type
199
+ if (value && !newType) {
200
+ newType = selectedVariable.type;
201
+ }
202
+ if (newType === generated_1.EnvironmentSecretType.FileBase64 && value) {
203
+ const environmentFilePath = path_1.default.resolve(value);
204
+ if (!(await fs_extra_1.default.pathExists(environmentFilePath))) {
205
+ if (type === 'file') {
206
+ throw new Error(`File "${value}" does not exist`);
207
+ }
208
+ else {
209
+ throw new Error(`Variable "${selectedVariable.name}" is a file type, but "${value}" does not exist as a file. If you want to convert it to a string, pass --type string.`);
210
+ }
211
+ }
212
+ fileName = path_1.default.basename(environmentFilePath);
213
+ value = await fs_extra_1.default.readFile(environmentFilePath, 'base64');
214
+ }
207
215
  if (visibility) {
208
216
  newVisibility = (0, prompts_2.parseVisibility)(visibility);
209
217
  }
@@ -382,6 +382,9 @@ class UpdatePublish extends EasCommand_1.default {
382
382
  publishSpinner.fail('Failed to publish updates');
383
383
  throw e;
384
384
  }
385
+ if ((0, utils_1.isBundleDiffingEnabled)(exp)) {
386
+ await (0, utils_1.prewarmDiffingAsync)(graphqlClient, projectId, newUpdates);
387
+ }
385
388
  if (!skipBundler && emitMetadata) {
386
389
  log_1.default.log('Generating eas-update-metadata.json');
387
390
  await (0, publish_1.generateEasMetadataAsync)(distRoot, (0, utils_1.getUpdateJsonInfosForUpdates)(newUpdates));
@@ -103,7 +103,9 @@ class WorkflowRun extends EasCommand_1.default {
103
103
  nonInteractive: flags['non-interactive'],
104
104
  withServerSideEnvironment: null,
105
105
  });
106
- const { projectId, exp: { slug: projectName }, } = await getDynamicPrivateProjectConfigAsync();
106
+ const { projectId, exp: { slug: projectName }, } = await getDynamicPrivateProjectConfigAsync({
107
+ skipPlugins: true,
108
+ });
107
109
  const account = await (0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId);
108
110
  let yamlConfig;
109
111
  let workflowRunId;
@@ -60,7 +60,7 @@ class WorkflowStatus extends EasCommand_1.default {
60
60
  });
61
61
  const { projectId, exp: { slug: projectName }, } = await getDynamicPrivateProjectConfigAsync();
62
62
  const account = await (0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId);
63
- let workflowRunId = args.workflowRunId;
63
+ let workflowRunId = args.WORKFLOW_RUN_ID;
64
64
  if (!workflowRunId && flags['non-interactive']) {
65
65
  throw new Error('Workflow run ID is required in non-interactive mode');
66
66
  }
@@ -201,6 +201,7 @@ export type Account = {
201
201
  pendingSentryInstallation?: Maybe<PendingSentryInstallation>;
202
202
  profileImageUrl: Scalars['String']['output'];
203
203
  pushSecurityEnabled: Scalars['Boolean']['output'];
204
+ requireTwoFactor: Scalars['Boolean']['output'];
204
205
  /** @deprecated Legacy access tokens are deprecated */
205
206
  requiresAccessTokenForPushSecurity: Scalars['Boolean']['output'];
206
207
  sentryInstallation?: Maybe<SentryInstallation>;
@@ -228,8 +229,11 @@ export type Account = {
228
229
  userActorOwner?: Maybe<UserActor>;
229
230
  /** Pending user invitations for this account */
230
231
  userInvitations: Array<UserInvitation>;
232
+ userSpecifiedAccountUsage?: Maybe<UserSpecifiedAccountUsage>;
231
233
  /** Actors associated with this account and permissions they hold */
232
234
  users: Array<UserPermission>;
235
+ /** Vexo account connection for this account */
236
+ vexoAccountConnection?: Maybe<VexoAccountConnection>;
233
237
  /** Notification preferences of the viewer for this account */
234
238
  viewerNotificationPreferences: Array<NotificationPreferenceItem>;
235
239
  /** Permission info for the viewer on this account */
@@ -522,6 +526,7 @@ export declare enum AccountAppsSortByField {
522
526
  export type AccountDataInput = {
523
527
  displayName?: InputMaybe<Scalars['String']['input']>;
524
528
  name: Scalars['String']['input'];
529
+ userSpecifiedAccountUsage?: InputMaybe<UserSpecifiedAccountUsage>;
525
530
  };
526
531
  export type AccountGoogleServiceAccountKeysConnection = {
527
532
  __typename?: 'AccountGoogleServiceAccountKeysConnection';
@@ -557,6 +562,15 @@ export type AccountMutation = {
557
562
  setDisplayName: Account;
558
563
  /** Require authorization to send push notifications for experiences owned by this account */
559
564
  setPushSecurityEnabled: Account;
565
+ /**
566
+ * Set whether two-factor authentication is required for this account. When enabled:
567
+ * - Existing members with 2FA cannot disable it
568
+ * - New members must enable 2FA before joining
569
+ * - Existing members without 2FA are not affected
570
+ */
571
+ setRequireTwoFactor: Account;
572
+ /** Set the user specified account usage for the account. */
573
+ setUserSpecifiedAccountUsage: Account;
560
574
  };
561
575
  export type AccountMutationCancelAllSubscriptionsImmediatelyArgs = {
562
576
  accountID: Scalars['ID']['input'];
@@ -604,6 +618,14 @@ export type AccountMutationSetPushSecurityEnabledArgs = {
604
618
  accountID: Scalars['ID']['input'];
605
619
  pushSecurityEnabled: Scalars['Boolean']['input'];
606
620
  };
621
+ export type AccountMutationSetRequireTwoFactorArgs = {
622
+ accountID: Scalars['ID']['input'];
623
+ requireTwoFactor: Scalars['Boolean']['input'];
624
+ };
625
+ export type AccountMutationSetUserSpecifiedAccountUsageArgs = {
626
+ accountID: Scalars['ID']['input'];
627
+ userSpecifiedAccountUsage: UserSpecifiedAccountUsage;
628
+ };
607
629
  /** Account-level notification preference */
608
630
  export type AccountNotificationPreference = NotificationPreference & {
609
631
  __typename?: 'AccountNotificationPreference';
@@ -1286,6 +1308,7 @@ export type App = Project & {
1286
1308
  username: Scalars['String']['output'];
1287
1309
  /** @deprecated No longer supported */
1288
1310
  users?: Maybe<Array<Maybe<User>>>;
1311
+ vexoApp?: Maybe<VexoApp>;
1289
1312
  /** Notification preferences of the viewer for this app */
1290
1313
  viewerNotificationPreferences: Array<NotificationPreferenceItem>;
1291
1314
  /** Webhooks for an app */
@@ -2674,6 +2697,8 @@ export type BuildFilter = {
2674
2697
  status?: InputMaybe<BuildStatus>;
2675
2698
  };
2676
2699
  export type BuildFilterInput = {
2700
+ buildModes?: InputMaybe<Array<BuildMode>>;
2701
+ buildProfile?: InputMaybe<Scalars['String']['input']>;
2677
2702
  channel?: InputMaybe<Scalars['String']['input']>;
2678
2703
  developmentClient?: InputMaybe<Scalars['Boolean']['input']>;
2679
2704
  distributions?: InputMaybe<Array<DistributionType>>;
@@ -3155,6 +3180,19 @@ export type CreateSubmissionResult = {
3155
3180
  /** Created submission */
3156
3181
  submission: Submission;
3157
3182
  };
3183
+ export type CreateVexoAccountConnectionInput = {
3184
+ accountId: Scalars['ID']['input'];
3185
+ code: Scalars['String']['input'];
3186
+ };
3187
+ export type CreateVexoAppInput = {
3188
+ appId: Scalars['ID']['input'];
3189
+ domain?: InputMaybe<Scalars['String']['input']>;
3190
+ iconUrl?: InputMaybe<Scalars['String']['input']>;
3191
+ name: Scalars['String']['input'];
3192
+ owner: Scalars['String']['input'];
3193
+ slug: Scalars['String']['input'];
3194
+ vexoIdentifier: Scalars['String']['input'];
3195
+ };
3158
3196
  export type CumulativeAverageMetrics = {
3159
3197
  __typename?: 'CumulativeAverageMetrics';
3160
3198
  averageUpdatePayloadBytes: Scalars['Int']['output'];
@@ -5323,6 +5361,12 @@ export type RootMutation = {
5323
5361
  userDashboardViewPins: UserDashboardViewPinMutation;
5324
5362
  /** Mutations that create, delete, and accept UserInvitations */
5325
5363
  userInvitation: UserInvitationMutation;
5364
+ /** Mutation interface for user preferences */
5365
+ userPreference: UserPreferenceMutation;
5366
+ /** Mutations for Vexo account connections */
5367
+ vexoAccountConnection: VexoAccountConnectionMutation;
5368
+ /** Mutations for Vexo apps */
5369
+ vexoApp: VexoAppMutation;
5326
5370
  /** Mutations that create, delete, update Webhooks */
5327
5371
  webhook: WebhookMutation;
5328
5372
  /** Mutations that modify a websiteNotification */
@@ -5448,6 +5492,10 @@ export type RootQuery = {
5448
5492
  userByUsername?: Maybe<User>;
5449
5493
  /** Top-level query object for querying UserInvitationPublicData publicly. */
5450
5494
  userInvitationPublicData: UserInvitationPublicDataQuery;
5495
+ /** Query interface for user preferences */
5496
+ userPreference: UserPreferenceQuery;
5497
+ /** Top-level query object for querying Vexo Integration information. */
5498
+ vexoIntegration: VexoIntegrationQuery;
5451
5499
  /**
5452
5500
  * If authenticated as a typical end user, this is the appropriate top-level
5453
5501
  * query object
@@ -6363,6 +6411,13 @@ export type UpdateRolloutInfoGroup = {
6363
6411
  ios?: InputMaybe<UpdateRolloutInfo>;
6364
6412
  web?: InputMaybe<UpdateRolloutInfo>;
6365
6413
  };
6414
+ export type UpdateVexoAppInput = {
6415
+ domain?: InputMaybe<Scalars['String']['input']>;
6416
+ iconUrl?: InputMaybe<Scalars['String']['input']>;
6417
+ name?: InputMaybe<Scalars['String']['input']>;
6418
+ owner?: InputMaybe<Scalars['String']['input']>;
6419
+ slug?: InputMaybe<Scalars['String']['input']>;
6420
+ };
6366
6421
  export type UpdatesFilter = {
6367
6422
  platform?: InputMaybe<AppPlatform>;
6368
6423
  runtimeVersions?: InputMaybe<Array<Scalars['String']['input']>>;
@@ -6823,6 +6878,8 @@ export type UserInvitation = {
6823
6878
  * @deprecated Use accountProfileImageUrl
6824
6879
  */
6825
6880
  accountProfilePhoto?: Maybe<Scalars['String']['output']>;
6881
+ /** Whether the account requires two-factor authentication */
6882
+ accountRequiresTwoFactor: Scalars['Boolean']['output'];
6826
6883
  created: Scalars['DateTime']['output'];
6827
6884
  /** Email to which this invitation was sent */
6828
6885
  email: Scalars['String']['output'];
@@ -6892,6 +6949,7 @@ export type UserInvitationPublicData = {
6892
6949
  accountName: Scalars['String']['output'];
6893
6950
  accountProfileImageUrl: Scalars['String']['output'];
6894
6951
  accountProfilePhoto?: Maybe<Scalars['String']['output']>;
6952
+ accountRequiresTwoFactor: Scalars['Boolean']['output'];
6895
6953
  created: Scalars['DateTime']['output'];
6896
6954
  email: Scalars['String']['output'];
6897
6955
  expires: Scalars['DateTime']['output'];
@@ -6921,6 +6979,42 @@ export type UserPermission = {
6921
6979
  user?: Maybe<User>;
6922
6980
  userActor?: Maybe<UserActor>;
6923
6981
  };
6982
+ /** A single user preference key-value pair */
6983
+ export type UserPreference = {
6984
+ __typename?: 'UserPreference';
6985
+ createdAt: Scalars['DateTime']['output'];
6986
+ id: Scalars['ID']['output'];
6987
+ key: Scalars['String']['output'];
6988
+ updatedAt: Scalars['DateTime']['output'];
6989
+ value: Scalars['JSON']['output'];
6990
+ };
6991
+ /** Mutation interface for user preferences */
6992
+ export type UserPreferenceMutation = {
6993
+ __typename?: 'UserPreferenceMutation';
6994
+ /** Delete a user preference by key */
6995
+ delete?: Maybe<UserPreference>;
6996
+ /** Set a user preference value by key */
6997
+ set: UserPreference;
6998
+ };
6999
+ /** Mutation interface for user preferences */
7000
+ export type UserPreferenceMutationDeleteArgs = {
7001
+ key: Scalars['String']['input'];
7002
+ };
7003
+ /** Mutation interface for user preferences */
7004
+ export type UserPreferenceMutationSetArgs = {
7005
+ key: Scalars['String']['input'];
7006
+ value: Scalars['JSON']['input'];
7007
+ };
7008
+ /** Query interface for user preferences */
7009
+ export type UserPreferenceQuery = {
7010
+ __typename?: 'UserPreferenceQuery';
7011
+ /** Get a user preference by key */
7012
+ get?: Maybe<UserPreference>;
7013
+ };
7014
+ /** Query interface for user preferences */
7015
+ export type UserPreferenceQueryGetArgs = {
7016
+ key: Scalars['String']['input'];
7017
+ };
6924
7018
  export type UserPreferences = {
6925
7019
  __typename?: 'UserPreferences';
6926
7020
  onboarding?: Maybe<UserPreferencesOnboarding>;
@@ -6991,6 +7085,69 @@ export type UserSecondFactorDevice = {
6991
7085
  updatedAt: Scalars['DateTime']['output'];
6992
7086
  user: User;
6993
7087
  };
7088
+ export declare enum UserSpecifiedAccountUsage {
7089
+ Company = "COMPANY",
7090
+ Personal = "PERSONAL"
7091
+ }
7092
+ export type VexoAccountAccessToken = {
7093
+ __typename?: 'VexoAccountAccessToken';
7094
+ access_token: Scalars['String']['output'];
7095
+ expires_at?: Maybe<Scalars['String']['output']>;
7096
+ token_type: Scalars['String']['output'];
7097
+ };
7098
+ export type VexoAccountConnection = {
7099
+ __typename?: 'VexoAccountConnection';
7100
+ accessToken: VexoAccountAccessToken;
7101
+ account: Account;
7102
+ id: Scalars['ID']['output'];
7103
+ };
7104
+ export type VexoAccountConnectionMutation = {
7105
+ __typename?: 'VexoAccountConnectionMutation';
7106
+ /** Create a Vexo account connection for an Account */
7107
+ createVexoAccountConnection: VexoAccountConnection;
7108
+ /** Delete a Vexo account connection by ID and revoke the access token */
7109
+ revokeAndDeleteVexoAccountConnection: VexoAccountConnection;
7110
+ };
7111
+ export type VexoAccountConnectionMutationCreateVexoAccountConnectionArgs = {
7112
+ vexoAccountConnectionData: CreateVexoAccountConnectionInput;
7113
+ };
7114
+ export type VexoAccountConnectionMutationRevokeAndDeleteVexoAccountConnectionArgs = {
7115
+ vexoAccountConnectionId: Scalars['ID']['input'];
7116
+ };
7117
+ export type VexoApp = {
7118
+ __typename?: 'VexoApp';
7119
+ app: App;
7120
+ domain?: Maybe<Scalars['String']['output']>;
7121
+ iconUrl?: Maybe<Scalars['String']['output']>;
7122
+ id: Scalars['ID']['output'];
7123
+ name: Scalars['String']['output'];
7124
+ owner: Scalars['String']['output'];
7125
+ slug: Scalars['String']['output'];
7126
+ vexoIdentifier: Scalars['String']['output'];
7127
+ };
7128
+ export type VexoAppMutation = {
7129
+ __typename?: 'VexoAppMutation';
7130
+ /** Create a Vexo app for an App */
7131
+ createVexoApp: VexoApp;
7132
+ /** Delete a Vexo app by ID */
7133
+ deleteVexoApp: VexoApp;
7134
+ /** Update a Vexo app by ID */
7135
+ updateVexoApp: VexoApp;
7136
+ };
7137
+ export type VexoAppMutationCreateVexoAppArgs = {
7138
+ vexoAppData: CreateVexoAppInput;
7139
+ };
7140
+ export type VexoAppMutationDeleteVexoAppArgs = {
7141
+ vexoAppId: Scalars['ID']['input'];
7142
+ };
7143
+ export type VexoAppMutationUpdateVexoAppArgs = {
7144
+ vexoAppData: UpdateVexoAppInput;
7145
+ vexoAppId: Scalars['ID']['input'];
7146
+ };
7147
+ export type VexoIntegrationQuery = {
7148
+ __typename?: 'VexoIntegrationQuery';
7149
+ clientIdentifier: Scalars['String']['output'];
7150
+ };
6994
7151
  export type WebNotificationUpdateReadStateInput = {
6995
7152
  id: Scalars['ID']['input'];
6996
7153
  isRead: Scalars['Boolean']['input'];
@@ -7487,6 +7644,7 @@ export type WorkflowJob = {
7487
7644
  approvals: Array<WorkflowJobApproval>;
7488
7645
  createdAt: Scalars['DateTime']['output'];
7489
7646
  credentialsAppleDeviceRegistrationRequest?: Maybe<AppleDeviceRegistrationRequest>;
7647
+ environment?: Maybe<Scalars['String']['output']>;
7490
7648
  errors: Array<WorkflowJobError>;
7491
7649
  id: Scalars['ID']['output'];
7492
7650
  key: Scalars['String']['output'];
@@ -12922,6 +13080,22 @@ export type LatestAppVersionQuery = {
12922
13080
  };
12923
13081
  };
12924
13082
  };
13083
+ export type GetAssetSignedUrlsQueryVariables = Exact<{
13084
+ updateId: Scalars['ID']['input'];
13085
+ storageKeys: Array<Scalars['String']['input']> | Scalars['String']['input'];
13086
+ }>;
13087
+ export type GetAssetSignedUrlsQuery = {
13088
+ __typename?: 'RootQuery';
13089
+ asset: {
13090
+ __typename?: 'AssetQuery';
13091
+ signedUrls: Array<{
13092
+ __typename?: 'AssetSignedUrlResult';
13093
+ storageKey: string;
13094
+ url: string;
13095
+ headers?: any | null;
13096
+ }>;
13097
+ };
13098
+ };
12925
13099
  export type BackgroundJobReceiptByIdQueryVariables = Exact<{
12926
13100
  id: Scalars['ID']['input'];
12927
13101
  }>;
@@ -12969,6 +13143,8 @@ export type ViewLatestUpdateOnBranchQueryVariables = Exact<{
12969
13143
  branchName: Scalars['String']['input'];
12970
13144
  platform: AppPlatform;
12971
13145
  runtimeVersion: Scalars['String']['input'];
13146
+ offset: Scalars['Int']['input'];
13147
+ limit: Scalars['Int']['input'];
12972
13148
  }>;
12973
13149
  export type ViewLatestUpdateOnBranchQuery = {
12974
13150
  __typename?: 'RootQuery';
@@ -8,7 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.EnvironmentVariableVisibility = exports.EnvironmentVariableScope = exports.EnvironmentSecretType = exports.EntityTypeName = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildWaiverType = exports.EasBuildDeprecationInfoType = exports.EasBuildBillingResourceClass = exports.DistributionType = exports.DashboardViewPin = 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.BuildAnnotationType = exports.BackgroundJobState = exports.BackgroundJobResultType = exports.AuthProviderIdentifier = exports.AuthProtocolType = exports.AuditLogsExportFormat = exports.AssetMetadataStatus = exports.AssetMapSourceType = 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.SubmissionStatus = exports.SubmissionPriority = exports.SubmissionArchiveSourceType = 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.LocalBuildArchiveSourceType = 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.GitHubAppInstallationAccountType = exports.GitHubAppEnvironment = exports.FingerprintSourceType = exports.Feature = exports.Experiment = void 0;
11
- exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkflowJobReviewDecision = exports.WorkflowArtifactStorageType = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserEntityTypeName = exports.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.TargetEntityMutationType = void 0;
11
+ exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkflowJobReviewDecision = exports.WorkflowArtifactStorageType = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserSpecifiedAccountUsage = exports.UserEntityTypeName = exports.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.TargetEntityMutationType = void 0;
12
12
  var AccountAppsSortByField;
13
13
  (function (AccountAppsSortByField) {
14
14
  AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
@@ -830,6 +830,11 @@ var UserEntityTypeName;
830
830
  UserEntityTypeName["UserSecondFactorBackupCodesEntity"] = "UserSecondFactorBackupCodesEntity";
831
831
  UserEntityTypeName["UserSecondFactorDeviceEntity"] = "UserSecondFactorDeviceEntity";
832
832
  })(UserEntityTypeName || (exports.UserEntityTypeName = UserEntityTypeName = {}));
833
+ var UserSpecifiedAccountUsage;
834
+ (function (UserSpecifiedAccountUsage) {
835
+ UserSpecifiedAccountUsage["Company"] = "COMPANY";
836
+ UserSpecifiedAccountUsage["Personal"] = "PERSONAL";
837
+ })(UserSpecifiedAccountUsage || (exports.UserSpecifiedAccountUsage = UserSpecifiedAccountUsage = {}));
833
838
  var WebhookType;
834
839
  (function (WebhookType) {
835
840
  WebhookType["Build"] = "BUILD";
@@ -0,0 +1,5 @@
1
+ import { ExpoGraphqlClient } from '../../commandUtils/context/contextUtils/createGraphqlClient';
2
+ import { AssetSignedUrlResult } from '../generated';
3
+ export declare const AssetQuery: {
4
+ getSignedUrlsAsync(graphqlClient: ExpoGraphqlClient, updateId: string, storageKeys: string[]): Promise<AssetSignedUrlResult[]>;
5
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssetQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const graphql_tag_1 = tslib_1.__importDefault(require("graphql-tag"));
6
+ const client_1 = require("../client");
7
+ exports.AssetQuery = {
8
+ async getSignedUrlsAsync(graphqlClient, updateId, storageKeys) {
9
+ const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
10
+ .query((0, graphql_tag_1.default) `
11
+ query GetAssetSignedUrls($updateId: ID!, $storageKeys: [String!]!) {
12
+ asset {
13
+ signedUrls(updateId: $updateId, storageKeys: $storageKeys) {
14
+ storageKey
15
+ url
16
+ headers
17
+ }
18
+ }
19
+ }
20
+ `, {
21
+ updateId,
22
+ storageKeys,
23
+ }, { additionalTypenames: [] })
24
+ .toPromise());
25
+ return data.asset.signedUrls;
26
+ },
27
+ };
@@ -3,6 +3,14 @@ import { AppPlatform, BranchesBasicPaginatedOnAppQuery, BranchesBasicPaginatedOn
3
3
  export type UpdateBranchOnChannelObject = NonNullable<ViewBranchesOnUpdateChannelQuery['app']['byId']['updateChannelByName']>['updateBranches'][number];
4
4
  export declare const BranchQuery: {
5
5
  getBranchByNameAsync(graphqlClient: ExpoGraphqlClient, { appId, name }: ViewBranchQueryVariables): Promise<UpdateBranchBasicInfoFragment>;
6
+ getUpdateIdsOnBranchAsync(graphqlClient: ExpoGraphqlClient, { appId, branchName, platform, runtimeVersion, offset, limit, }: {
7
+ appId: string;
8
+ branchName: string;
9
+ platform: AppPlatform;
10
+ runtimeVersion: string;
11
+ offset?: number | undefined;
12
+ limit?: number | undefined;
13
+ }): Promise<string[]>;
6
14
  getLatestUpdateIdOnBranchAsync(graphqlClient: ExpoGraphqlClient, { appId, branchName, platform, runtimeVersion, }: {
7
15
  appId: string;
8
16
  branchName: string;
@@ -36,7 +36,7 @@ exports.BranchQuery = {
36
36
  }
37
37
  return updateBranchByName;
38
38
  },
39
- async getLatestUpdateIdOnBranchAsync(graphqlClient, { appId, branchName, platform, runtimeVersion, }) {
39
+ async getUpdateIdsOnBranchAsync(graphqlClient, { appId, branchName, platform, runtimeVersion, offset = 0, limit = 1, }) {
40
40
  const response = await (0, client_1.withErrorHandlingAsync)(graphqlClient
41
41
  .query((0, graphql_tag_1.default) `
42
42
  query ViewLatestUpdateOnBranch(
@@ -44,6 +44,8 @@ exports.BranchQuery = {
44
44
  $branchName: String!
45
45
  $platform: AppPlatform!
46
46
  $runtimeVersion: String!
47
+ $offset: Int!
48
+ $limit: Int!
47
49
  ) {
48
50
  app {
49
51
  byId(appId: $appId) {
@@ -51,8 +53,8 @@ exports.BranchQuery = {
51
53
  updateBranchByName(name: $branchName) {
52
54
  id
53
55
  updates(
54
- offset: 0
55
- limit: 1
56
+ offset: $offset
57
+ limit: $limit
56
58
  filter: { platform: $platform, runtimeVersions: [$runtimeVersion] }
57
59
  ) {
58
60
  id
@@ -66,17 +68,26 @@ exports.BranchQuery = {
66
68
  branchName,
67
69
  platform,
68
70
  runtimeVersion,
71
+ offset,
72
+ limit,
69
73
  }, { additionalTypenames: ['UpdateBranch'] })
70
74
  .toPromise());
71
75
  const { updateBranchByName } = response.app.byId;
72
76
  if (!updateBranchByName) {
73
77
  throw new utils_1.BranchNotFoundError(`Could not find a branch named "${branchName}".`);
74
78
  }
75
- const latestUpdate = updateBranchByName.updates[0];
76
- if (!latestUpdate) {
77
- return null;
78
- }
79
- return latestUpdate.id;
79
+ return updateBranchByName.updates.map(update => update.id);
80
+ },
81
+ async getLatestUpdateIdOnBranchAsync(graphqlClient, { appId, branchName, platform, runtimeVersion, }) {
82
+ const updateIds = await this.getUpdateIdsOnBranchAsync(graphqlClient, {
83
+ appId,
84
+ branchName,
85
+ platform,
86
+ runtimeVersion,
87
+ offset: 0,
88
+ limit: 1,
89
+ });
90
+ return updateIds[0] ?? null;
80
91
  },
81
92
  async listBranchesOnAppAsync(graphqlClient, { appId, limit, offset }) {
82
93
  const data = await (0, client_1.withErrorHandlingAsync)(graphqlClient
@@ -4,11 +4,10 @@ import { Env, Platform, Workflow } from '@expo/eas-build-job';
4
4
  import Joi from 'joi';
5
5
  import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
6
6
  import { PaginatedQueryOptions } from '../commandUtils/pagination';
7
- import { AppPlatform, BuildFragment, FingerprintSourceInput, PartialManifestAsset, UpdateRolloutInfoGroup } from '../graphql/generated';
7
+ import { BuildFragment, FingerprintSourceInput, PartialManifestAsset, UpdateRolloutInfoGroup } from '../graphql/generated';
8
8
  import { RequestedPlatform } from '../platform';
9
- import { UpdateJsonInfo } from '../update/utils';
9
+ import { UpdateJsonInfo, UpdatePublishPlatform } from '../update/utils';
10
10
  import { Client } from '../vcs/vcs';
11
- export type UpdatePublishPlatform = 'ios' | 'android';
12
11
  type Metadata = {
13
12
  version: number;
14
13
  bundler: 'metro';
@@ -203,7 +202,6 @@ export declare function findCompatibleBuildsAsync(graphqlClient: ExpoGraphqlClie
203
202
  };
204
203
  }>;
205
204
  export declare const platformDisplayNames: Record<UpdatePublishPlatform, string>;
206
- export declare const updatePublishPlatformToAppPlatform: Record<UpdatePublishPlatform, AppPlatform>;
207
205
  export declare function getRuntimeToUpdateRolloutInfoGroupMappingAsync(graphqlClient: ExpoGraphqlClient, { appId, branchName, rolloutPercentage, runtimeToPlatformsAndFingerprintInfoMapping, }: {
208
206
  appId: string;
209
207
  branchName: string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUpdateRolloutInfoGroupAsync = exports.getRuntimeToUpdateRolloutInfoGroupMappingAsync = exports.updatePublishPlatformToAppPlatform = exports.platformDisplayNames = exports.findCompatibleBuildsAsync = exports.maybeCalculateFingerprintForRuntimeVersionInfoObjectsWithoutExpoUpdatesAsync = exports.getRuntimeToPlatformsAndFingerprintInfoMappingFromRuntimeVersionInfoObjects = exports.getRuntimeVersionInfoObjectsAsync = exports.defaultPublishPlatforms = exports.getUpdateMessageForCommandAsync = exports.getBranchNameForCommandAsync = exports.isUploadedAssetCountAboveWarningThreshold = exports.uploadAssetsAsync = exports.filterOutAssetsThatAlreadyExistAsync = exports.collectAssetsAsync = exports.getOriginalPathFromAssetMap = exports.getAssetHashFromPath = exports.filterCollectedAssetsByRequestedPlatforms = exports.generateEasMetadataAsync = exports.loadMetadata = exports.resolveInputDirectoryAsync = exports.buildBundlesAsync = exports.buildUnsortedUpdateInfoGroupAsync = exports.convertAssetToUpdateInfoGroupFormatAsync = exports.getStorageKeyForAssetAsync = exports.getStorageKey = exports.getBase64URLEncoding = exports.guessContentTypeFromExtension = exports.MetadataJoi = void 0;
3
+ exports.getUpdateRolloutInfoGroupAsync = exports.getRuntimeToUpdateRolloutInfoGroupMappingAsync = exports.platformDisplayNames = exports.findCompatibleBuildsAsync = exports.maybeCalculateFingerprintForRuntimeVersionInfoObjectsWithoutExpoUpdatesAsync = exports.getRuntimeToPlatformsAndFingerprintInfoMappingFromRuntimeVersionInfoObjects = exports.getRuntimeVersionInfoObjectsAsync = exports.defaultPublishPlatforms = exports.getUpdateMessageForCommandAsync = exports.getBranchNameForCommandAsync = exports.isUploadedAssetCountAboveWarningThreshold = exports.uploadAssetsAsync = exports.filterOutAssetsThatAlreadyExistAsync = exports.collectAssetsAsync = exports.getOriginalPathFromAssetMap = exports.getAssetHashFromPath = exports.filterCollectedAssetsByRequestedPlatforms = exports.generateEasMetadataAsync = exports.loadMetadata = exports.resolveInputDirectoryAsync = exports.buildBundlesAsync = exports.buildUnsortedUpdateInfoGroupAsync = exports.convertAssetToUpdateInfoGroupFormatAsync = exports.getStorageKeyForAssetAsync = exports.getStorageKey = exports.getBase64URLEncoding = exports.guessContentTypeFromExtension = exports.MetadataJoi = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const config_plugins_1 = require("@expo/config-plugins");
6
6
  const eas_build_job_1 = require("@expo/eas-build-job");
@@ -626,10 +626,6 @@ exports.platformDisplayNames = {
626
626
  android: 'Android',
627
627
  ios: 'iOS',
628
628
  };
629
- exports.updatePublishPlatformToAppPlatform = {
630
- android: generated_1.AppPlatform.Android,
631
- ios: generated_1.AppPlatform.Ios,
632
- };
633
629
  async function getRuntimeToUpdateRolloutInfoGroupMappingAsync(graphqlClient, { appId, branchName, rolloutPercentage, runtimeToPlatformsAndFingerprintInfoMapping, }) {
634
630
  const runtimeToPlatformsMap = new Map(runtimeToPlatformsAndFingerprintInfoMapping.map(r => [r.runtimeVersion, r.platforms]));
635
631
  return await (0, mapMapAsync_1.default)(runtimeToPlatformsMap, async (platforms, runtimeVersion) => {
@@ -650,7 +646,7 @@ async function getUpdateRolloutInfoGroupAsync(graphqlClient, { appId, branchName
650
646
  appId,
651
647
  branchName,
652
648
  runtimeVersion,
653
- platform: exports.updatePublishPlatformToAppPlatform[platform],
649
+ platform: utils_2.updatePublishPlatformToAppPlatform[platform],
654
650
  });
655
651
  return [platform, { rolloutPercentage, rolloutControlUpdateId: updateIdForPlatform }];
656
652
  })));
@@ -1,7 +1,7 @@
1
+ import { UpdatePublishPlatform } from './utils';
1
2
  import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
2
3
  import { PaginatedQueryOptions } from '../commandUtils/pagination';
3
4
  import { RuntimeFragment, UpdateFragment } from '../graphql/generated';
4
- import { UpdatePublishPlatform } from '../project/publish';
5
5
  export declare const UPDATES_LIMIT = 50;
6
6
  export declare const UPDATE_GROUPS_LIMIT = 25;
7
7
  export declare const RUNTIME_VERSIONS_LIMIT = 25;
@@ -1,7 +1,7 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
+ import { UpdatePublishPlatform } from './utils';
2
3
  import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
3
4
  import { UpdateFragment } from '../graphql/generated';
4
- import { UpdatePublishPlatform } from '../project/publish';
5
5
  import { CodeSigningInfo } from '../utils/code-signing';
6
6
  export type UpdateToRepublish = {
7
7
  groupId: string;
@@ -1,6 +1,6 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
+ import { UpdatePublishPlatform } from './utils';
2
3
  import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
3
- import { UpdatePublishPlatform } from '../project/publish';
4
4
  import { CodeSigningInfo } from '../utils/code-signing';
5
5
  export declare function publishRollBackToEmbeddedUpdateAsync({ graphqlClient, projectId, exp, updateMessage, branch, codeSigningInfo, platforms, runtimeVersion, json, }: {
6
6
  graphqlClient: ExpoGraphqlClient;
@@ -1,5 +1,6 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
- import { Robot, SsoUser, Update, UpdateBranchFragment, UpdateFragment, User } from '../graphql/generated';
2
+ import { ExpoGraphqlClient } from '../commandUtils/context/contextUtils/createGraphqlClient';
3
+ import { AppPlatform, Robot, SsoUser, Update, UpdateBranchFragment, UpdateFragment, UpdatePublishMutation, User } from '../graphql/generated';
3
4
  import { RequestedPlatform } from '../platform';
4
5
  export type FormatUpdateParameter = Pick<Update, 'id' | 'createdAt' | 'message'> & {
5
6
  actor?: Pick<Robot, '__typename' | 'firstName'> | Pick<User, '__typename' | 'username'> | Pick<SsoUser, '__typename' | 'username'> | null;
@@ -53,3 +54,7 @@ export declare function getUpdateJsonInfosForUpdates(updates: UpdateFragment[]):
53
54
  export declare function getUpdateGroupDescriptions(updateGroups: UpdateFragment[][]): FormattedUpdateGroupDescription[];
54
55
  export declare function getUpdateGroupDescriptionsWithBranch(updateGroups: UpdateFragment[][]): FormattedUpdateGroupDescriptionWithBranch[];
55
56
  export declare function getBranchDescription(branch: UpdateBranchFragment): FormattedBranchDescription;
57
+ export declare function isBundleDiffingEnabled(exp: ExpoConfig): boolean;
58
+ export declare function prewarmDiffingAsync(graphqlClient: ExpoGraphqlClient, appId: string, newUpdates: UpdatePublishMutation['updateBranch']['publishUpdateGroups']): Promise<void>;
59
+ export type UpdatePublishPlatform = 'ios' | 'android';
60
+ export declare const updatePublishPlatformToAppPlatform: Record<UpdatePublishPlatform, AppPlatform>;