eas-cli 3.8.1 → 3.9.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 (40) hide show
  1. package/README.md +79 -54
  2. package/build/build/build.js +1 -1
  3. package/build/build/runBuildAndSubmit.js +1 -1
  4. package/build/commandUtils/context/DynamicProjectConfigContextField.js +1 -1
  5. package/build/commandUtils/context/contextUtils/findProjectDirAndVerifyProjectSetupAsync.js +1 -1
  6. package/build/commands/build/index.js +1 -1
  7. package/build/commands/build/internal.js +3 -0
  8. package/build/commands/build/resign.js +1 -1
  9. package/build/commands/build/version/set.js +1 -1
  10. package/build/commands/build/version/sync.js +1 -1
  11. package/build/commands/channel/rollout.d.ts +0 -2
  12. package/build/commands/channel/rollout.js +44 -18
  13. package/build/commands/config.js +1 -1
  14. package/build/commands/metadata/lint.js +1 -1
  15. package/build/commands/metadata/pull.js +1 -1
  16. package/build/commands/metadata/push.js +1 -1
  17. package/build/commands/submit.js +1 -1
  18. package/build/commands/update/index.d.ts +0 -2
  19. package/build/commands/update/index.js +31 -136
  20. package/build/commands/update/republish.js +1 -1
  21. package/build/commands/update/roll-back-to-embedded.d.ts +22 -0
  22. package/build/commands/update/roll-back-to-embedded.js +253 -0
  23. package/build/credentials/ios/IosCredentialsProvider.js +1 -1
  24. package/build/credentials/manager/SelectBuildProfileFromEasJson.js +1 -1
  25. package/build/graphql/generated.d.ts +139 -22
  26. package/build/graphql/generated.js +0 -2
  27. package/build/graphql/types/Update.js +1 -0
  28. package/build/project/customBuildConfig.js +19 -4
  29. package/build/project/publish.d.ts +31 -0
  30. package/build/project/publish.js +147 -2
  31. package/build/update/configure.js +1 -1
  32. package/build/update/utils.d.ts +2 -0
  33. package/build/update/utils.js +30 -13
  34. package/build/utils/code-signing.d.ts +4 -3
  35. package/build/utils/code-signing.js +23 -5
  36. package/build/utils/expoCli.js +3 -2
  37. package/build/utils/expodash/areSetsEqual.d.ts +1 -0
  38. package/build/utils/expodash/areSetsEqual.js +6 -0
  39. package/oclif.manifest.json +1 -1
  40. package/package.json +4 -3
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const core_1 = require("@oclif/core");
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
+ const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
8
+ const queries_1 = require("../../branch/queries");
9
+ const url_1 = require("../../build/utils/url");
10
+ const queries_2 = require("../../channel/queries");
11
+ const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
12
+ const flags_1 = require("../../commandUtils/flags");
13
+ const pagination_1 = require("../../commandUtils/pagination");
14
+ const fetch_1 = tslib_1.__importDefault(require("../../fetch"));
15
+ const generated_1 = require("../../graphql/generated");
16
+ const PublishMutation_1 = require("../../graphql/mutations/PublishMutation");
17
+ const log_1 = tslib_1.__importStar(require("../../log"));
18
+ const ora_1 = require("../../ora");
19
+ const projectUtils_1 = require("../../project/projectUtils");
20
+ const publish_1 = require("../../project/publish");
21
+ const configure_1 = require("../../update/configure");
22
+ const utils_1 = require("../../update/utils");
23
+ const code_signing_1 = require("../../utils/code-signing");
24
+ const uniqBy_1 = tslib_1.__importDefault(require("../../utils/expodash/uniqBy"));
25
+ const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
26
+ const json_1 = require("../../utils/json");
27
+ const statuspageService_1 = require("../../utils/statuspageService");
28
+ const vcs_1 = require("../../vcs");
29
+ class UpdateRollBackToEmbedded extends EasCommand_1.default {
30
+ async runAsync() {
31
+ const { flags: rawFlags } = await this.parse(UpdateRollBackToEmbedded);
32
+ const paginatedQueryOptions = (0, pagination_1.getPaginatedQueryOptions)(rawFlags);
33
+ const { auto: autoFlag, platform: platformFlag, channelName: channelNameArg, updateMessage: updateMessageArg, privateKeyPath, json: jsonFlag, nonInteractive, branchName: branchNameArg, } = this.sanitizeFlags(rawFlags);
34
+ const { getDynamicProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateRollBackToEmbedded, {
35
+ nonInteractive,
36
+ });
37
+ if (jsonFlag) {
38
+ (0, json_1.enableJsonOutput)();
39
+ }
40
+ const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicProjectConfigAsync({
41
+ isPublicConfig: true,
42
+ });
43
+ await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
44
+ await (0, configure_1.ensureEASUpdateIsConfiguredAsync)(graphqlClient, {
45
+ exp: expPossiblyWithoutEasUpdateConfigured,
46
+ platform: (0, publish_1.getRequestedPlatform)(platformFlag),
47
+ projectDir,
48
+ projectId,
49
+ });
50
+ const { exp } = await getDynamicProjectConfigAsync({ isPublicConfig: true });
51
+ const { exp: expPrivate } = await getDynamicProjectConfigAsync({
52
+ isPublicConfig: false,
53
+ });
54
+ const codeSigningInfo = await (0, code_signing_1.getCodeSigningInfoAsync)(expPrivate, privateKeyPath);
55
+ const branchName = await (0, publish_1.getBranchNameForCommandAsync)({
56
+ graphqlClient,
57
+ projectId,
58
+ channelNameArg,
59
+ branchNameArg,
60
+ autoFlag,
61
+ nonInteractive,
62
+ paginatedQueryOptions,
63
+ });
64
+ const updateMessage = await (0, publish_1.getUpdateMessageForCommandAsync)({
65
+ updateMessageArg,
66
+ autoFlag,
67
+ nonInteractive,
68
+ jsonFlag,
69
+ });
70
+ const realizedPlatforms = platformFlag === 'all' ? publish_1.defaultPublishPlatforms : [platformFlag];
71
+ const { branchId, createdBranch } = await (0, queries_1.ensureBranchExistsAsync)(graphqlClient, {
72
+ appId: projectId,
73
+ branchName,
74
+ });
75
+ if (createdBranch) {
76
+ await (0, queries_2.ensureChannelExistsAsync)(graphqlClient, {
77
+ appId: projectId,
78
+ branchId,
79
+ channelName: branchName,
80
+ });
81
+ }
82
+ log_1.default.withTick(`Channel: ${chalk_1.default.bold(branchName)} pointed at branch: ${chalk_1.default.bold(branchName)}`);
83
+ const vcsClient = (0, vcs_1.getVcsClient)();
84
+ const gitCommitHash = await vcsClient.getCommitHashAsync();
85
+ const isGitWorkingTreeDirty = await vcsClient.hasUncommittedChangesAsync();
86
+ const runtimeVersions = await (0, publish_1.getRuntimeVersionObjectAsync)(exp, realizedPlatforms, projectDir);
87
+ let newUpdates;
88
+ const publishSpinner = (0, ora_1.ora)('Publishing...').start();
89
+ try {
90
+ newUpdates = await this.publishRollbacksAsync({
91
+ graphqlClient,
92
+ isGitWorkingTreeDirty,
93
+ gitCommitHash,
94
+ updateMessage,
95
+ branchId,
96
+ codeSigningInfo,
97
+ runtimeVersions,
98
+ realizedPlatforms,
99
+ });
100
+ publishSpinner.succeed('Published!');
101
+ }
102
+ catch (e) {
103
+ publishSpinner.fail('Failed to publish updates');
104
+ throw e;
105
+ }
106
+ if (jsonFlag) {
107
+ (0, json_1.printJsonOnlyOutput)((0, utils_1.getUpdateGroupJsonInfo)(newUpdates));
108
+ }
109
+ else {
110
+ if (new Set(newUpdates.map(update => update.group)).size > 1) {
111
+ log_1.default.addNewLineIfNone();
112
+ log_1.default.log('👉 Since multiple runtime versions are defined, multiple update groups have been published.');
113
+ }
114
+ log_1.default.addNewLineIfNone();
115
+ for (const runtime of (0, uniqBy_1.default)(runtimeVersions, version => version.runtimeVersion)) {
116
+ const newUpdatesForRuntimeVersion = newUpdates.filter(update => update.runtimeVersion === runtime.runtimeVersion);
117
+ if (newUpdatesForRuntimeVersion.length === 0) {
118
+ throw new Error(`Publish response is missing updates with runtime ${runtime.runtimeVersion}.`);
119
+ }
120
+ const platforms = newUpdatesForRuntimeVersion.map(update => update.platform);
121
+ const newAndroidUpdate = newUpdatesForRuntimeVersion.find(update => update.platform === 'android');
122
+ const newIosUpdate = newUpdatesForRuntimeVersion.find(update => update.platform === 'ios');
123
+ const updateGroupId = newUpdatesForRuntimeVersion[0].group;
124
+ const projectName = exp.slug;
125
+ const accountName = (await (0, projectUtils_1.getOwnerAccountForProjectIdAsync)(graphqlClient, projectId)).name;
126
+ const updateGroupUrl = (0, url_1.getUpdateGroupUrl)(accountName, projectName, updateGroupId);
127
+ const updateGroupLink = (0, log_1.link)(updateGroupUrl, { dim: false });
128
+ log_1.default.log((0, formatFields_1.default)([
129
+ { label: 'Branch', value: branchName },
130
+ { label: 'Runtime version', value: runtime.runtimeVersion },
131
+ { label: 'Platform', value: platforms.join(', ') },
132
+ { label: 'Update group ID', value: updateGroupId },
133
+ ...(newAndroidUpdate
134
+ ? [{ label: 'Android update ID', value: newAndroidUpdate.id }]
135
+ : []),
136
+ ...(newIosUpdate ? [{ label: 'iOS update ID', value: newIosUpdate.id }] : []),
137
+ { label: 'Message', value: updateMessage },
138
+ ...(gitCommitHash
139
+ ? [
140
+ {
141
+ label: 'Commit',
142
+ value: `${gitCommitHash}${isGitWorkingTreeDirty ? '*' : ''}`,
143
+ },
144
+ ]
145
+ : []),
146
+ { label: 'Website link', value: updateGroupLink },
147
+ ]));
148
+ log_1.default.addNewLineIfNone();
149
+ }
150
+ }
151
+ }
152
+ async publishRollbacksAsync({ graphqlClient, isGitWorkingTreeDirty, gitCommitHash, updateMessage, branchId, codeSigningInfo, runtimeVersions, realizedPlatforms, }) {
153
+ const runtimeToPlatformMapping = (0, publish_1.getRuntimeToPlatformMappingFromRuntimeVersions)(runtimeVersions);
154
+ const rollbackInfoGroups = Object.fromEntries(realizedPlatforms.map(platform => [platform, true]));
155
+ // Sort the updates into different groups based on their platform specific runtime versions
156
+ const updateGroups = runtimeToPlatformMapping.map(({ runtimeVersion, platforms }) => {
157
+ const localRollbackInfoGroup = Object.fromEntries(platforms.map(platform => [platform, rollbackInfoGroups[platform]]));
158
+ return {
159
+ branchId,
160
+ rollBackToEmbeddedInfoGroup: localRollbackInfoGroup,
161
+ runtimeVersion,
162
+ message: updateMessage,
163
+ gitCommitHash,
164
+ isGitWorkingTreeDirty,
165
+ awaitingCodeSigningInfo: !!codeSigningInfo,
166
+ };
167
+ });
168
+ const newUpdates = await PublishMutation_1.PublishMutation.publishUpdateGroupAsync(graphqlClient, updateGroups);
169
+ if (codeSigningInfo) {
170
+ log_1.default.log('🔒 Signing roll back');
171
+ const updatesTemp = [...newUpdates];
172
+ const updateGroupsAndTheirUpdates = updateGroups.map(updateGroup => {
173
+ const newUpdates = updatesTemp.splice(0, Object.keys((0, nullthrows_1.default)(updateGroup.rollBackToEmbeddedInfoGroup)).length);
174
+ return {
175
+ updateGroup,
176
+ newUpdates,
177
+ };
178
+ });
179
+ await Promise.all(updateGroupsAndTheirUpdates.map(async ({ newUpdates }) => {
180
+ await Promise.all(newUpdates.map(async (newUpdate) => {
181
+ const response = await (0, fetch_1.default)(newUpdate.manifestPermalink, {
182
+ method: 'GET',
183
+ headers: { accept: 'multipart/mixed' },
184
+ });
185
+ const directiveBody = (0, nullthrows_1.default)(await (0, code_signing_1.getDirectiveBodyAsync)(response));
186
+ (0, code_signing_1.checkDirectiveBodyAgainstUpdateInfoGroup)(directiveBody);
187
+ const directiveSignature = (0, code_signing_1.signBody)(directiveBody, codeSigningInfo);
188
+ await PublishMutation_1.PublishMutation.setCodeSigningInfoAsync(graphqlClient, newUpdate.id, {
189
+ alg: codeSigningInfo.codeSigningMetadata.alg,
190
+ keyid: codeSigningInfo.codeSigningMetadata.keyid,
191
+ sig: directiveSignature,
192
+ });
193
+ }));
194
+ }));
195
+ }
196
+ return newUpdates;
197
+ }
198
+ sanitizeFlags(flags) {
199
+ var _b, _c;
200
+ const nonInteractive = (_b = flags['non-interactive']) !== null && _b !== void 0 ? _b : false;
201
+ const { auto, branch: branchName, channel: channelName, message: updateMessage } = flags;
202
+ if (nonInteractive && !auto && !(updateMessage && (branchName || channelName))) {
203
+ core_1.Errors.error('--branch and --message, or --channel and --message are required when updating in non-interactive mode unless --auto is specified', { exit: 1 });
204
+ }
205
+ return {
206
+ auto,
207
+ branchName,
208
+ channelName,
209
+ updateMessage,
210
+ platform: flags.platform,
211
+ privateKeyPath: flags['private-key-path'],
212
+ nonInteractive,
213
+ json: (_c = flags.json) !== null && _c !== void 0 ? _c : false,
214
+ };
215
+ }
216
+ }
217
+ exports.default = UpdateRollBackToEmbedded;
218
+ _a = UpdateRollBackToEmbedded;
219
+ UpdateRollBackToEmbedded.hidden = true; // until we launch
220
+ UpdateRollBackToEmbedded.description = 'roll back to the embedded update';
221
+ UpdateRollBackToEmbedded.flags = {
222
+ branch: core_1.Flags.string({
223
+ description: 'Branch to publish the rollback to embedded update group on',
224
+ required: false,
225
+ }),
226
+ channel: core_1.Flags.string({
227
+ description: 'Channel that the published rollback to embedded update should affect',
228
+ required: false,
229
+ }),
230
+ message: core_1.Flags.string({
231
+ description: 'A short message describing the rollback to embedded update',
232
+ required: false,
233
+ }),
234
+ platform: core_1.Flags.enum({
235
+ char: 'p',
236
+ options: [...publish_1.defaultPublishPlatforms, 'all'],
237
+ default: 'all',
238
+ required: false,
239
+ }),
240
+ auto: core_1.Flags.boolean({
241
+ description: 'Use the current git branch and commit message for the EAS branch and update message',
242
+ default: false,
243
+ }),
244
+ 'private-key-path': core_1.Flags.string({
245
+ description: `File containing the PEM-encoded private key corresponding to the certificate in expo-updates' configuration. Defaults to a file named "private-key.pem" in the certificate's directory.`,
246
+ required: false,
247
+ }),
248
+ ...flags_1.EasNonInteractiveAndJsonFlags,
249
+ };
250
+ UpdateRollBackToEmbedded.contextDefinition = {
251
+ ..._a.ContextOptions.DynamicProjectConfig,
252
+ ..._a.ContextOptions.LoggedIn,
253
+ };
@@ -92,7 +92,7 @@ class IosCredentialsProvider {
92
92
  }
93
93
  }
94
94
  async disablePushNotificationsSetupInEasJsonAsync(ctx) {
95
- const easJsonAccessor = new eas_json_1.EasJsonAccessor(ctx.projectDir);
95
+ const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(ctx.projectDir);
96
96
  await easJsonAccessor.readRawJsonAsync();
97
97
  easJsonAccessor.patch(easJsonRawObject => {
98
98
  easJsonRawObject.cli = {
@@ -8,7 +8,7 @@ const prompts_1 = require("../../prompts");
8
8
  class SelectBuildProfileFromEasJson {
9
9
  constructor(projectDir, platform) {
10
10
  this.platform = platform;
11
- this.easJsonAccessor = new eas_json_1.EasJsonAccessor(projectDir);
11
+ this.easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
12
12
  }
13
13
  async runAsync() {
14
14
  const profileName = await this.getProfileNameFromEasConfigAsync();
@@ -427,6 +427,11 @@ export type AccountSsoConfigurationPublicDataQuery = {
427
427
  export type AccountSsoConfigurationPublicDataQueryPublicDataByAccountNameArgs = {
428
428
  accountName: Scalars['String'];
429
429
  };
430
+ export type AccountUsageEasBuildMetadata = {
431
+ __typename?: 'AccountUsageEASBuildMetadata';
432
+ platform: AppPlatform;
433
+ };
434
+ export type AccountUsageMetadata = AccountUsageEasBuildMetadata;
430
435
  export type AccountUsageMetric = {
431
436
  __typename?: 'AccountUsageMetric';
432
437
  id: Scalars['ID'];
@@ -435,18 +440,6 @@ export type AccountUsageMetric = {
435
440
  timestamp: Scalars['DateTime'];
436
441
  value: Scalars['Float'];
437
442
  };
438
- export type AccountUsageMetricAndCost = {
439
- __typename?: 'AccountUsageMetricAndCost';
440
- id: Scalars['ID'];
441
- /** The limit, in units, allowed by this plan */
442
- limit: Scalars['Float'];
443
- metricType: UsageMetricType;
444
- service: EasService;
445
- serviceMetric: EasServiceMetric;
446
- /** Total cost of this particular metric, in cents */
447
- totalCost: Scalars['Float'];
448
- value: Scalars['Float'];
449
- };
450
443
  export type AccountUsageMetrics = {
451
444
  __typename?: 'AccountUsageMetrics';
452
445
  byBillingPeriod: UsageMetricTotal;
@@ -813,8 +806,10 @@ export type App = Project & {
813
806
  buildOrBuildJobs: Array<BuildOrBuildJob>;
814
807
  /** (EAS Build) Builds associated with this app */
815
808
  builds: Array<Build>;
809
+ buildsPaginated: AppBuildsConnection;
816
810
  /** Classic update release channel names that have at least one build */
817
811
  buildsReleaseChannels: Array<Scalars['String']>;
812
+ channelsPaginated: AppChannelsConnection;
818
813
  deployment?: Maybe<Deployment>;
819
814
  /** Deployments associated with this app */
820
815
  deployments: DeploymentsConnection;
@@ -870,6 +865,7 @@ export type App = Project & {
870
865
  slug: Scalars['String'];
871
866
  /** EAS Submissions associated with this app */
872
867
  submissions: Array<Submission>;
868
+ submissionsPaginated: AppSubmissionsConnection;
873
869
  /** Coalesced project activity for an app using pagination */
874
870
  timelineActivity: TimelineActivityConnection;
875
871
  /** @deprecated 'likes' have been deprecated. */
@@ -936,6 +932,21 @@ export type AppBuildsArgs = {
936
932
  status?: InputMaybe<BuildStatus>;
937
933
  };
938
934
  /** Represents an Exponent App (or Experience in legacy terms) */
935
+ export type AppBuildsPaginatedArgs = {
936
+ after?: InputMaybe<Scalars['String']>;
937
+ before?: InputMaybe<Scalars['String']>;
938
+ filter?: InputMaybe<BuildFilterInput>;
939
+ first?: InputMaybe<Scalars['Int']>;
940
+ last?: InputMaybe<Scalars['Int']>;
941
+ };
942
+ /** Represents an Exponent App (or Experience in legacy terms) */
943
+ export type AppChannelsPaginatedArgs = {
944
+ after?: InputMaybe<Scalars['String']>;
945
+ before?: InputMaybe<Scalars['String']>;
946
+ first?: InputMaybe<Scalars['Int']>;
947
+ last?: InputMaybe<Scalars['Int']>;
948
+ };
949
+ /** Represents an Exponent App (or Experience in legacy terms) */
939
950
  export type AppDeploymentArgs = {
940
951
  channel: Scalars['String'];
941
952
  runtimeVersion: Scalars['String'];
@@ -977,6 +988,13 @@ export type AppSubmissionsArgs = {
977
988
  offset: Scalars['Int'];
978
989
  };
979
990
  /** Represents an Exponent App (or Experience in legacy terms) */
991
+ export type AppSubmissionsPaginatedArgs = {
992
+ after?: InputMaybe<Scalars['String']>;
993
+ before?: InputMaybe<Scalars['String']>;
994
+ first?: InputMaybe<Scalars['Int']>;
995
+ last?: InputMaybe<Scalars['Int']>;
996
+ };
997
+ /** Represents an Exponent App (or Experience in legacy terms) */
980
998
  export type AppTimelineActivityArgs = {
981
999
  after?: InputMaybe<Scalars['String']>;
982
1000
  before?: InputMaybe<Scalars['String']>;
@@ -1034,6 +1052,26 @@ export type AppBranchesConnection = {
1034
1052
  edges: Array<AppBranchEdge>;
1035
1053
  pageInfo: PageInfo;
1036
1054
  };
1055
+ export type AppBuildEdge = {
1056
+ __typename?: 'AppBuildEdge';
1057
+ cursor: Scalars['String'];
1058
+ node: BuildOrBuildJob;
1059
+ };
1060
+ export type AppBuildsConnection = {
1061
+ __typename?: 'AppBuildsConnection';
1062
+ edges: Array<AppBuildEdge>;
1063
+ pageInfo: PageInfo;
1064
+ };
1065
+ export type AppChannelEdge = {
1066
+ __typename?: 'AppChannelEdge';
1067
+ cursor: Scalars['String'];
1068
+ node: UpdateChannel;
1069
+ };
1070
+ export type AppChannelsConnection = {
1071
+ __typename?: 'AppChannelsConnection';
1072
+ edges: Array<AppChannelEdge>;
1073
+ pageInfo: PageInfo;
1074
+ };
1037
1075
  export type AppDataInput = {
1038
1076
  id: Scalars['ID'];
1039
1077
  privacy?: InputMaybe<Scalars['String']>;
@@ -1190,6 +1228,16 @@ export declare enum AppStoreConnectUserRole {
1190
1228
  Technical = "TECHNICAL",
1191
1229
  Unknown = "UNKNOWN"
1192
1230
  }
1231
+ export type AppSubmissionEdge = {
1232
+ __typename?: 'AppSubmissionEdge';
1233
+ cursor: Scalars['String'];
1234
+ node: Submission;
1235
+ };
1236
+ export type AppSubmissionsConnection = {
1237
+ __typename?: 'AppSubmissionsConnection';
1238
+ edges: Array<AppSubmissionEdge>;
1239
+ pageInfo: PageInfo;
1240
+ };
1193
1241
  export type AppUpdateEdge = {
1194
1242
  __typename?: 'AppUpdateEdge';
1195
1243
  cursor: Scalars['String'];
@@ -1543,11 +1591,6 @@ export type Build = ActivityTimelineProjectActivity & BuildOrBuildJob & {
1543
1591
  __typename?: 'Build';
1544
1592
  activityTimestamp: Scalars['DateTime'];
1545
1593
  actor?: Maybe<Actor>;
1546
- /**
1547
- * The actual resource class of the builder assigned to the build job
1548
- * @deprecated Use resourceClassDisplayName instead
1549
- */
1550
- actualResourceClass?: Maybe<BuildResourceClass>;
1551
1594
  appBuildVersion?: Maybe<Scalars['String']>;
1552
1595
  appVersion?: Maybe<Scalars['String']>;
1553
1596
  artifacts?: Maybe<BuildArtifacts>;
@@ -1650,6 +1693,11 @@ export type BuildFilter = {
1650
1693
  sdkVersion?: InputMaybe<Scalars['String']>;
1651
1694
  status?: InputMaybe<BuildStatus>;
1652
1695
  };
1696
+ export type BuildFilterInput = {
1697
+ channel?: InputMaybe<Scalars['String']>;
1698
+ platforms?: InputMaybe<Array<AppPlatform>>;
1699
+ releaseChannel?: InputMaybe<Scalars['String']>;
1700
+ };
1653
1701
  export declare enum BuildIosEnterpriseProvisioning {
1654
1702
  Adhoc = "ADHOC",
1655
1703
  Universal = "UNIVERSAL"
@@ -1828,7 +1876,9 @@ export type BuildOrBuildJobQueryByIdArgs = {
1828
1876
  buildOrBuildJobId: Scalars['ID'];
1829
1877
  };
1830
1878
  export type BuildParamsInput = {
1879
+ reactNativeVersion?: InputMaybe<Scalars['String']>;
1831
1880
  resourceClass: BuildResourceClass;
1881
+ sdkVersion?: InputMaybe<Scalars['String']>;
1832
1882
  };
1833
1883
  export declare enum BuildPriority {
1834
1884
  High = "HIGH",
@@ -1901,8 +1951,6 @@ export declare enum BuildResourceClass {
1901
1951
  /** @deprecated Use IOS_M_MEDIUM instead */
1902
1952
  IosM1Large = "IOS_M1_LARGE",
1903
1953
  IosM1Medium = "IOS_M1_MEDIUM",
1904
- IosM2Medium = "IOS_M2_MEDIUM",
1905
- IosM2ProMedium = "IOS_M2_PRO_MEDIUM",
1906
1954
  IosMedium = "IOS_MEDIUM",
1907
1955
  IosMLarge = "IOS_M_LARGE",
1908
1956
  IosMMedium = "IOS_M_MEDIUM",
@@ -2071,6 +2119,10 @@ export type DeleteAppleProvisioningProfileResult = {
2071
2119
  __typename?: 'DeleteAppleProvisioningProfileResult';
2072
2120
  id: Scalars['ID'];
2073
2121
  };
2122
+ export type DeleteDiscordUserResult = {
2123
+ __typename?: 'DeleteDiscordUserResult';
2124
+ id: Scalars['ID'];
2125
+ };
2074
2126
  export type DeleteEnvironmentSecretResult = {
2075
2127
  __typename?: 'DeleteEnvironmentSecretResult';
2076
2128
  id: Scalars['ID'];
@@ -2148,6 +2200,27 @@ export type DeploymentsConnection = {
2148
2200
  edges: Array<DeploymentEdge>;
2149
2201
  pageInfo: PageInfo;
2150
2202
  };
2203
+ export type DiscordUser = {
2204
+ __typename?: 'DiscordUser';
2205
+ discordIdentifier: Scalars['String'];
2206
+ id: Scalars['ID'];
2207
+ metadata?: Maybe<DiscordUserMetadata>;
2208
+ userActor: UserActor;
2209
+ };
2210
+ export type DiscordUserMetadata = {
2211
+ __typename?: 'DiscordUserMetadata';
2212
+ discordAvatarUrl: Scalars['String'];
2213
+ discordDiscriminator: Scalars['String'];
2214
+ discordUsername: Scalars['String'];
2215
+ };
2216
+ export type DiscordUserMutation = {
2217
+ __typename?: 'DiscordUserMutation';
2218
+ /** Delete a Discord User by ID */
2219
+ deleteDiscordUser: DeleteDiscordUserResult;
2220
+ };
2221
+ export type DiscordUserMutationDeleteDiscordUserArgs = {
2222
+ id: Scalars['ID'];
2223
+ };
2151
2224
  export declare enum DistributionType {
2152
2225
  Internal = "INTERNAL",
2153
2226
  Simulator = "SIMULATOR",
@@ -2233,6 +2306,28 @@ export declare enum EnvironmentSecretType {
2233
2306
  FileBase64 = "FILE_BASE64",
2234
2307
  String = "STRING"
2235
2308
  }
2309
+ export type EstimatedOverageAndCost = {
2310
+ __typename?: 'EstimatedOverageAndCost';
2311
+ id: Scalars['ID'];
2312
+ /** The limit, in units, allowed by this plan */
2313
+ limit: Scalars['Float'];
2314
+ metadata?: Maybe<AccountUsageMetadata>;
2315
+ metricType: UsageMetricType;
2316
+ service: EasService;
2317
+ serviceMetric: EasServiceMetric;
2318
+ /** Total cost of this particular metric, in cents */
2319
+ totalCost: Scalars['Int'];
2320
+ value: Scalars['Float'];
2321
+ };
2322
+ export type EstimatedUsage = {
2323
+ __typename?: 'EstimatedUsage';
2324
+ id: Scalars['ID'];
2325
+ limit: Scalars['Float'];
2326
+ metricType: UsageMetricType;
2327
+ service: EasService;
2328
+ serviceMetric: EasServiceMetric;
2329
+ value: Scalars['Float'];
2330
+ };
2236
2331
  export type ExperimentationQuery = {
2237
2332
  __typename?: 'ExperimentationQuery';
2238
2333
  /** Get device experimentation config */
@@ -2351,6 +2446,7 @@ export type GitHubRepository = {
2351
2446
  app: App;
2352
2447
  githubAppInstallation: GitHubAppInstallation;
2353
2448
  githubRepositoryIdentifier: Scalars['Int'];
2449
+ githubRepositoryUrl?: Maybe<Scalars['String']>;
2354
2450
  id: Scalars['ID'];
2355
2451
  metadata?: Maybe<GitHubRepositoryMetadata>;
2356
2452
  nodeIdentifier: Scalars['String'];
@@ -3011,8 +3107,9 @@ export type PublishUpdateGroupInput = {
3011
3107
  gitCommitHash?: InputMaybe<Scalars['String']>;
3012
3108
  isGitWorkingTreeDirty?: InputMaybe<Scalars['Boolean']>;
3013
3109
  message?: InputMaybe<Scalars['String']>;
3110
+ rollBackToEmbeddedInfoGroup?: InputMaybe<UpdateRollBackToEmbeddedGroup>;
3014
3111
  runtimeVersion: Scalars['String'];
3015
- updateInfoGroup: UpdateInfoGroup;
3112
+ updateInfoGroup?: InputMaybe<UpdateInfoGroup>;
3016
3113
  };
3017
3114
  export type RescindUserInvitationResult = {
3018
3115
  __typename?: 'RescindUserInvitationResult';
@@ -3119,6 +3216,8 @@ export type RootMutation = {
3119
3216
  build: BuildMutation;
3120
3217
  /** Mutations that modify an BuildJob */
3121
3218
  buildJob: BuildJobMutation;
3219
+ /** Mutations for Discord users */
3220
+ discordUser: DiscordUserMutation;
3122
3221
  /** Mutations that modify an EmailSubscription */
3123
3222
  emailSubscription: EmailSubscriptionMutation;
3124
3223
  /** Mutations that create and delete EnvironmentSecrets */
@@ -3705,6 +3804,7 @@ export type Update = ActivityTimelineProjectActivity & {
3705
3804
  group: Scalars['String'];
3706
3805
  id: Scalars['ID'];
3707
3806
  isGitWorkingTreeDirty: Scalars['Boolean'];
3807
+ isRollBackToEmbedded: Scalars['Boolean'];
3708
3808
  manifestFragment: Scalars['String'];
3709
3809
  manifestPermalink: Scalars['String'];
3710
3810
  message?: Maybe<Scalars['String']>;
@@ -3828,6 +3928,11 @@ export type UpdateMutationSetCodeSigningInfoArgs = {
3828
3928
  codeSigningInfo: CodeSigningInfoInput;
3829
3929
  updateId: Scalars['ID'];
3830
3930
  };
3931
+ export type UpdateRollBackToEmbeddedGroup = {
3932
+ android?: InputMaybe<Scalars['Boolean']>;
3933
+ ios?: InputMaybe<Scalars['Boolean']>;
3934
+ web?: InputMaybe<Scalars['Boolean']>;
3935
+ };
3831
3936
  export type UpdatesFilter = {
3832
3937
  platform?: InputMaybe<AppPlatform>;
3833
3938
  runtimeVersions?: InputMaybe<Array<Scalars['String']>>;
@@ -3850,8 +3955,8 @@ export type UsageMetricTotal = {
3850
3955
  __typename?: 'UsageMetricTotal';
3851
3956
  billingPeriod: BillingPeriod;
3852
3957
  id: Scalars['ID'];
3853
- overageMetrics: Array<AccountUsageMetricAndCost>;
3854
- planMetrics: Array<AccountUsageMetricAndCost>;
3958
+ overageMetrics: Array<EstimatedOverageAndCost>;
3959
+ planMetrics: Array<EstimatedUsage>;
3855
3960
  /** Total cost of overages, in cents */
3856
3961
  totalCost: Scalars['Float'];
3857
3962
  };
@@ -3886,6 +3991,8 @@ export type User = Actor & UserActor & {
3886
3991
  apps: Array<App>;
3887
3992
  bestContactEmail?: Maybe<Scalars['String']>;
3888
3993
  created: Scalars['DateTime'];
3994
+ /** Discord account linked to a user */
3995
+ discordUser?: Maybe<DiscordUser>;
3889
3996
  displayName: Scalars['String'];
3890
3997
  email?: Maybe<Scalars['String']>;
3891
3998
  emailVerified: Scalars['Boolean'];
@@ -7599,6 +7706,7 @@ export type UpdatePublishMutation = {
7599
7706
  runtimeVersion: string;
7600
7707
  platform: string;
7601
7708
  manifestFragment: string;
7709
+ isRollBackToEmbedded: boolean;
7602
7710
  manifestPermalink: string;
7603
7711
  gitCommitHash?: string | null;
7604
7712
  actor?: {
@@ -7939,6 +8047,7 @@ export type BranchesByAppQuery = {
7939
8047
  runtimeVersion: string;
7940
8048
  platform: string;
7941
8049
  manifestFragment: string;
8050
+ isRollBackToEmbedded: boolean;
7942
8051
  manifestPermalink: string;
7943
8052
  gitCommitHash?: string | null;
7944
8053
  actor?: {
@@ -7998,6 +8107,7 @@ export type ViewBranchesOnUpdateChannelQuery = {
7998
8107
  runtimeVersion: string;
7999
8108
  platform: string;
8000
8109
  manifestFragment: string;
8110
+ isRollBackToEmbedded: boolean;
8001
8111
  manifestPermalink: string;
8002
8112
  gitCommitHash?: string | null;
8003
8113
  actor?: {
@@ -8328,6 +8438,7 @@ export type ViewUpdateChannelOnAppQuery = {
8328
8438
  runtimeVersion: string;
8329
8439
  platform: string;
8330
8440
  manifestFragment: string;
8441
+ isRollBackToEmbedded: boolean;
8331
8442
  manifestPermalink: string;
8332
8443
  gitCommitHash?: string | null;
8333
8444
  actor?: {
@@ -8389,6 +8500,7 @@ export type ViewUpdateChannelsOnAppQuery = {
8389
8500
  runtimeVersion: string;
8390
8501
  platform: string;
8391
8502
  manifestFragment: string;
8503
+ isRollBackToEmbedded: boolean;
8392
8504
  manifestPermalink: string;
8393
8505
  gitCommitHash?: string | null;
8394
8506
  actor?: {
@@ -8610,6 +8722,7 @@ export type ViewUpdatesByGroupQuery = {
8610
8722
  runtimeVersion: string;
8611
8723
  platform: string;
8612
8724
  manifestFragment: string;
8725
+ isRollBackToEmbedded: boolean;
8613
8726
  manifestPermalink: string;
8614
8727
  gitCommitHash?: string | null;
8615
8728
  actor?: {
@@ -8663,6 +8776,7 @@ export type ViewUpdateGroupsOnBranchQuery = {
8663
8776
  runtimeVersion: string;
8664
8777
  platform: string;
8665
8778
  manifestFragment: string;
8779
+ isRollBackToEmbedded: boolean;
8666
8780
  manifestPermalink: string;
8667
8781
  gitCommitHash?: string | null;
8668
8782
  actor?: {
@@ -8715,6 +8829,7 @@ export type ViewUpdateGroupsOnAppQuery = {
8715
8829
  runtimeVersion: string;
8716
8830
  platform: string;
8717
8831
  manifestFragment: string;
8832
+ isRollBackToEmbedded: boolean;
8718
8833
  manifestPermalink: string;
8719
8834
  gitCommitHash?: string | null;
8720
8835
  actor?: {
@@ -9160,6 +9275,7 @@ export type UpdateFragment = {
9160
9275
  runtimeVersion: string;
9161
9276
  platform: string;
9162
9277
  manifestFragment: string;
9278
+ isRollBackToEmbedded: boolean;
9163
9279
  manifestPermalink: string;
9164
9280
  gitCommitHash?: string | null;
9165
9281
  actor?: {
@@ -9199,6 +9315,7 @@ export type UpdateBranchFragment = {
9199
9315
  runtimeVersion: string;
9200
9316
  platform: string;
9201
9317
  manifestFragment: string;
9318
+ isRollBackToEmbedded: boolean;
9202
9319
  manifestPermalink: string;
9203
9320
  gitCommitHash?: string | null;
9204
9321
  actor?: {
@@ -140,8 +140,6 @@ var BuildResourceClass;
140
140
  /** @deprecated Use IOS_M_MEDIUM instead */
141
141
  BuildResourceClass["IosM1Large"] = "IOS_M1_LARGE";
142
142
  BuildResourceClass["IosM1Medium"] = "IOS_M1_MEDIUM";
143
- BuildResourceClass["IosM2Medium"] = "IOS_M2_MEDIUM";
144
- BuildResourceClass["IosM2ProMedium"] = "IOS_M2_PRO_MEDIUM";
145
143
  BuildResourceClass["IosMedium"] = "IOS_MEDIUM";
146
144
  BuildResourceClass["IosMLarge"] = "IOS_M_LARGE";
147
145
  BuildResourceClass["IosMMedium"] = "IOS_M_MEDIUM";
@@ -12,6 +12,7 @@ exports.UpdateFragmentNode = (0, graphql_tag_1.default) `
12
12
  runtimeVersion
13
13
  platform
14
14
  manifestFragment
15
+ isRollBackToEmbedded
15
16
  manifestPermalink
16
17
  gitCommitHash
17
18
  actor {