eas-cli 3.8.1 → 3.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -54
- package/build/build/android/prepareJob.js +0 -1
- package/build/build/build.js +1 -1
- package/build/build/ios/prepareJob.js +0 -1
- package/build/build/runBuildAndSubmit.js +1 -1
- package/build/commandUtils/context/DynamicProjectConfigContextField.js +1 -1
- package/build/commandUtils/context/contextUtils/findProjectDirAndVerifyProjectSetupAsync.js +1 -1
- package/build/commands/build/index.js +1 -1
- package/build/commands/build/internal.js +3 -0
- package/build/commands/build/resign.js +1 -1
- package/build/commands/build/version/set.js +1 -1
- package/build/commands/build/version/sync.js +1 -1
- package/build/commands/channel/rollout.d.ts +0 -2
- package/build/commands/channel/rollout.js +44 -18
- package/build/commands/config.js +1 -1
- package/build/commands/metadata/lint.js +1 -1
- package/build/commands/metadata/pull.js +1 -1
- package/build/commands/metadata/push.js +1 -1
- package/build/commands/submit.js +1 -1
- package/build/commands/update/index.d.ts +0 -2
- package/build/commands/update/index.js +31 -136
- package/build/commands/update/republish.js +1 -1
- package/build/commands/update/roll-back-to-embedded.d.ts +22 -0
- package/build/commands/update/roll-back-to-embedded.js +253 -0
- package/build/credentials/ios/IosCredentialsProvider.js +1 -1
- package/build/credentials/manager/SelectBuildProfileFromEasJson.js +1 -1
- package/build/graphql/generated.d.ts +139 -22
- package/build/graphql/generated.js +0 -2
- package/build/graphql/types/Update.js +1 -0
- package/build/project/customBuildConfig.js +19 -4
- package/build/project/publish.d.ts +31 -0
- package/build/project/publish.js +147 -2
- package/build/update/configure.js +1 -1
- package/build/update/utils.d.ts +2 -0
- package/build/update/utils.js +30 -13
- package/build/utils/code-signing.d.ts +4 -3
- package/build/utils/code-signing.js +23 -5
- package/build/utils/expoCli.js +3 -2
- package/build/utils/expodash/areSetsEqual.d.ts +1 -0
- package/build/utils/expodash/areSetsEqual.js +6 -0
- package/oclif.manifest.json +1 -1
- package/package.json +6 -5
|
@@ -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 =
|
|
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 =
|
|
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
|
|
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<
|
|
3854
|
-
planMetrics: Array<
|
|
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";
|