eas-cli 16.6.2 → 16.7.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 +82 -78
- package/build/api.d.ts +1 -1
- package/build/api.js +4 -1
- package/build/build/runBuildAndSubmit.js +8 -3
- package/build/commands/build/configure.js +7 -2
- package/build/commands/project/onboarding.js +1 -1
- package/build/commands/update/configure.js +4 -0
- package/build/commands/update/index.js +6 -0
- package/build/commands/update/republish.d.ts +1 -0
- package/build/commands/update/republish.js +8 -0
- package/build/commands/update/roll-back-to-embedded.js +4 -0
- package/build/commands/workflow/run.js +34 -14
- package/build/graphql/generated.d.ts +95 -3
- package/build/graphql/generated.js +1 -0
- package/build/graphql/types/Update.js +4 -0
- package/build/project/projectUtils.d.ts +1 -1
- package/build/project/projectUtils.js +2 -2
- package/build/project/publish.d.ts +7 -0
- package/build/project/publish.js +23 -13
- package/build/update/configure.d.ts +2 -1
- package/build/update/configure.js +5 -4
- package/build/update/republish.d.ts +2 -1
- package/build/update/republish.js +34 -2
- package/build/update/utils.d.ts +0 -1
- package/build/update/utils.js +1 -8
- package/oclif.manifest.json +8 -1
- package/package.json +3 -3
package/build/api.d.ts
CHANGED
|
@@ -18,5 +18,5 @@ export declare class ApiV2Client {
|
|
|
18
18
|
}
|
|
19
19
|
export declare function getExpoApiBaseUrl(): string;
|
|
20
20
|
export declare function getExpoWebsiteBaseUrl(): string;
|
|
21
|
-
export declare function getEASUpdateURL(projectId: string): string;
|
|
21
|
+
export declare function getEASUpdateURL(projectId: string, manifestHostOverride: string | null): string;
|
|
22
22
|
export {};
|
package/build/api.js
CHANGED
|
@@ -90,7 +90,10 @@ function getExpoWebsiteBaseUrl() {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
exports.getExpoWebsiteBaseUrl = getExpoWebsiteBaseUrl;
|
|
93
|
-
function getEASUpdateURL(projectId) {
|
|
93
|
+
function getEASUpdateURL(projectId, manifestHostOverride) {
|
|
94
|
+
if (manifestHostOverride) {
|
|
95
|
+
return new URL(projectId, `https://${manifestHostOverride}`).href;
|
|
96
|
+
}
|
|
94
97
|
if (process.env.EXPO_STAGING) {
|
|
95
98
|
return new URL(projectId, `https://staging-u.expo.dev`).href;
|
|
96
99
|
}
|
|
@@ -121,6 +121,7 @@ async function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, pro
|
|
|
121
121
|
getDynamicPrivateProjectConfigAsync,
|
|
122
122
|
customBuildConfigMetadata: customBuildConfigMetadataByPlatform[platform],
|
|
123
123
|
env,
|
|
124
|
+
easJsonAccessor,
|
|
124
125
|
});
|
|
125
126
|
if (maybeBuild) {
|
|
126
127
|
startedBuilds.push({ build: maybeBuild, buildProfile });
|
|
@@ -215,7 +216,7 @@ async function runBuildAndSubmitAsync({ graphqlClient, analytics, vcsClient, pro
|
|
|
215
216
|
};
|
|
216
217
|
}
|
|
217
218
|
exports.runBuildAndSubmitAsync = runBuildAndSubmitAsync;
|
|
218
|
-
async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, easJsonCliConfig, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, env, }) {
|
|
219
|
+
async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildProfile, easJsonCliConfig, actor, graphqlClient, analytics, vcsClient, getDynamicPrivateProjectConfigAsync, customBuildConfigMetadata, env, easJsonAccessor, }) {
|
|
219
220
|
const buildCtx = await (0, createContext_1.createBuildContextAsync)({
|
|
220
221
|
buildProfileName: buildProfile.profileName,
|
|
221
222
|
resourceClassFlag: flags.resourceClass,
|
|
@@ -255,8 +256,10 @@ async function prepareAndStartBuildAsync({ projectDir, flags, moreBuilds, buildP
|
|
|
255
256
|
nonInteractive: flags.nonInteractive,
|
|
256
257
|
buildProfile,
|
|
257
258
|
env: buildProfile.profile.env,
|
|
259
|
+
easJsonAccessor,
|
|
258
260
|
});
|
|
259
|
-
|
|
261
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
262
|
+
if ((0, projectUtils_1.isUsingEASUpdate)(buildCtx.exp, buildCtx.projectId, easJsonUpdateConfig.manifestHostOverride ?? null)) {
|
|
260
263
|
const doesChannelExist = await (0, queries_1.doesChannelExistAsync)(graphqlClient, {
|
|
261
264
|
appId: buildCtx.projectId,
|
|
262
265
|
channelName: buildProfile.profile.channel,
|
|
@@ -371,7 +374,7 @@ async function maybeDownloadAndRunSimulatorBuildsAsync(builds, flags, autoConfir
|
|
|
371
374
|
}
|
|
372
375
|
}
|
|
373
376
|
}
|
|
374
|
-
async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, projectId, projectDir, vcsClient, buildProfile, nonInteractive, sdkVersion, env, }) {
|
|
377
|
+
async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, projectId, projectDir, vcsClient, buildProfile, nonInteractive, sdkVersion, env, easJsonAccessor, }) {
|
|
375
378
|
if ((0, projectUtils_1.isExpoUpdatesInstalledOrAvailable)(projectDir, sdkVersion)) {
|
|
376
379
|
return;
|
|
377
380
|
}
|
|
@@ -387,6 +390,7 @@ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, proje
|
|
|
387
390
|
message: `Would you like to install the "expo-updates" package and configure EAS Update now?`,
|
|
388
391
|
});
|
|
389
392
|
if (installExpoUpdates) {
|
|
393
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
390
394
|
await (0, configure_2.ensureEASUpdateIsConfiguredAsync)({
|
|
391
395
|
exp,
|
|
392
396
|
projectId,
|
|
@@ -394,6 +398,7 @@ async function validateExpoUpdatesInstalledAsProjectDependencyAsync({ exp, proje
|
|
|
394
398
|
platform: platform_1.RequestedPlatform.All,
|
|
395
399
|
vcsClient,
|
|
396
400
|
env,
|
|
401
|
+
manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
|
|
397
402
|
});
|
|
398
403
|
log_1.default.withTick('Installed expo-updates and configured EAS Update.');
|
|
399
404
|
throw new Error('Command must be re-run to pick up new updates configuration.');
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
5
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
5
6
|
const core_1 = require("@oclif/core");
|
|
6
7
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
8
|
const syncProjectConfiguration_1 = require("../../build/android/syncProjectConfiguration");
|
|
@@ -51,8 +52,12 @@ class BuildConfigure extends EasCommand_1.default {
|
|
|
51
52
|
nonInteractive: false,
|
|
52
53
|
vcsClient,
|
|
53
54
|
});
|
|
54
|
-
if (didCreateEasJson
|
|
55
|
-
|
|
55
|
+
if (didCreateEasJson) {
|
|
56
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
57
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
58
|
+
if ((0, projectUtils_1.isUsingEASUpdate)(exp, projectId, easJsonUpdateConfig.manifestHostOverride ?? null)) {
|
|
59
|
+
await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
|
|
60
|
+
}
|
|
56
61
|
}
|
|
57
62
|
// configure expo-updates
|
|
58
63
|
if (expoUpdatesIsInstalled) {
|
|
@@ -283,7 +283,7 @@ async function configureProjectFromBareDefaultExpoTemplateAsync({ app, vcsClient
|
|
|
283
283
|
const isSlugValidSegment = /^[^a-z]/.test(app.slug);
|
|
284
284
|
const slugPrefix = isSlugValidSegment ? 'app' : '';
|
|
285
285
|
const bundleIdentifier = `com.${userPrefix}${stripInvalidCharactersForBundleIdentifier(app.ownerAccount.name)}.${slugPrefix}${stripInvalidCharactersForBundleIdentifier(app.slug)}`;
|
|
286
|
-
const updateUrl = (0, api_1.getEASUpdateURL)(app.id);
|
|
286
|
+
const updateUrl = (0, api_1.getEASUpdateURL)(app.id, /* manifestHostOverride */ null);
|
|
287
287
|
const easBuildGitHubConfig = {
|
|
288
288
|
android: {
|
|
289
289
|
image: 'latest',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
4
5
|
const core_1 = require("@oclif/core");
|
|
5
6
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
7
|
const configure_1 = require("../../build/configure");
|
|
@@ -34,6 +35,8 @@ class UpdateConfigure extends EasCommand_1.default {
|
|
|
34
35
|
});
|
|
35
36
|
log_1.default.log('💡 The following process will configure your project to use EAS Update. These changes only apply to your local project files and you can safely revert them at any time.');
|
|
36
37
|
await vcsClient.ensureRepoExistsAsync();
|
|
38
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
39
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
37
40
|
await (0, configure_2.ensureEASUpdateIsConfiguredAsync)({
|
|
38
41
|
exp,
|
|
39
42
|
projectId,
|
|
@@ -42,6 +45,7 @@ class UpdateConfigure extends EasCommand_1.default {
|
|
|
42
45
|
vcsClient,
|
|
43
46
|
env: undefined,
|
|
44
47
|
forceNativeConfigSync: true,
|
|
48
|
+
manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
|
|
45
49
|
});
|
|
46
50
|
await (0, configure_2.ensureEASUpdateIsConfiguredInEasJsonAsync)(projectDir);
|
|
47
51
|
log_1.default.addNewLineIfNone();
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const eas_build_job_1 = require("@expo/eas-build-job");
|
|
5
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
5
6
|
const core_1 = require("@oclif/core");
|
|
6
7
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
8
|
const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
|
|
@@ -110,6 +111,8 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
110
111
|
await (0, repository_1.ensureRepoIsCleanAsync)(vcsClient, nonInteractive);
|
|
111
112
|
const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
|
|
112
113
|
await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
|
|
114
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
115
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
113
116
|
await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
|
|
114
117
|
exp: expPossiblyWithoutEasUpdateConfigured,
|
|
115
118
|
platform: requestedPlatform,
|
|
@@ -117,6 +120,7 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
117
120
|
projectId,
|
|
118
121
|
vcsClient,
|
|
119
122
|
env: undefined,
|
|
123
|
+
manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
|
|
120
124
|
});
|
|
121
125
|
const { exp } = await getDynamicPublicProjectConfigAsync();
|
|
122
126
|
const { exp: expPrivate } = await getDynamicPrivateProjectConfigAsync();
|
|
@@ -341,6 +345,8 @@ class UpdatePublish extends EasCommand_1.default {
|
|
|
341
345
|
isGitWorkingTreeDirty,
|
|
342
346
|
awaitingCodeSigningInfo: !!codeSigningInfo,
|
|
343
347
|
environment: environment ?? null,
|
|
348
|
+
manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
|
|
349
|
+
assetHostOverride: easJsonUpdateConfig.assetHostOverride ?? null,
|
|
344
350
|
};
|
|
345
351
|
});
|
|
346
352
|
let newUpdates;
|
|
@@ -12,6 +12,7 @@ export default class UpdateRepublish extends EasCommand {
|
|
|
12
12
|
message: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
13
13
|
platform: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
14
14
|
'private-key-path': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined>;
|
|
15
|
+
'rollout-percentage': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined>;
|
|
15
16
|
};
|
|
16
17
|
static contextDefinition: {
|
|
17
18
|
loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
|
|
@@ -56,6 +56,12 @@ class UpdateRepublish extends EasCommand_1.default {
|
|
|
56
56
|
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. Only relevant if you are using code signing: https://docs.expo.dev/eas-update/code-signing/`,
|
|
57
57
|
required: false,
|
|
58
58
|
}),
|
|
59
|
+
'rollout-percentage': core_1.Flags.integer({
|
|
60
|
+
description: `Percentage of users this update should be immediately available to. Users not in the rollout will be served the previous latest update on the branch, even if that update is itself being rolled out. The specified number must be an integer between 1 and 100. When not specified, this defaults to 100.`,
|
|
61
|
+
required: false,
|
|
62
|
+
min: 0,
|
|
63
|
+
max: 100,
|
|
64
|
+
}),
|
|
59
65
|
...flags_1.EasNonInteractiveAndJsonFlags,
|
|
60
66
|
};
|
|
61
67
|
static contextDefinition = {
|
|
@@ -102,6 +108,7 @@ class UpdateRepublish extends EasCommand_1.default {
|
|
|
102
108
|
updateMessage,
|
|
103
109
|
codeSigningInfo,
|
|
104
110
|
json: flags.json,
|
|
111
|
+
rolloutPercentage: flags.rolloutPercentage,
|
|
105
112
|
});
|
|
106
113
|
}
|
|
107
114
|
sanitizeFlags(rawFlags) {
|
|
@@ -125,6 +132,7 @@ class UpdateRepublish extends EasCommand_1.default {
|
|
|
125
132
|
platform,
|
|
126
133
|
updateMessage: rawFlags.message,
|
|
127
134
|
privateKeyPath,
|
|
135
|
+
rolloutPercentage: rawFlags['rollout-percentage'],
|
|
128
136
|
json: rawFlags.json ?? false,
|
|
129
137
|
nonInteractive,
|
|
130
138
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
const eas_json_1 = require("@expo/eas-json");
|
|
4
5
|
const core_1 = require("@oclif/core");
|
|
5
6
|
const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
|
|
6
7
|
const queries_1 = require("../../branch/queries");
|
|
@@ -77,6 +78,8 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
|
|
|
77
78
|
}
|
|
78
79
|
const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
|
|
79
80
|
await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
|
|
81
|
+
const easJsonAccessor = eas_json_1.EasJsonAccessor.fromProjectPath(projectDir);
|
|
82
|
+
const easJsonUpdateConfig = (await eas_json_1.EasJsonUtils.getUpdateConfigAsync(easJsonAccessor)) ?? {};
|
|
80
83
|
await (0, configure_1.ensureEASUpdateIsConfiguredAsync)({
|
|
81
84
|
exp: expPossiblyWithoutEasUpdateConfigured,
|
|
82
85
|
platform: platformFlag,
|
|
@@ -84,6 +87,7 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
|
|
|
84
87
|
projectId,
|
|
85
88
|
vcsClient,
|
|
86
89
|
env: undefined,
|
|
90
|
+
manifestHostOverride: easJsonUpdateConfig.manifestHostOverride ?? null,
|
|
87
91
|
});
|
|
88
92
|
// check that the expo-updates package version supports roll back to embedded
|
|
89
93
|
await (0, projectUtils_1.enforceRollBackToEmbeddedUpdateSupportAsync)(projectDir);
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const core_1 = require("@oclif/core");
|
|
5
5
|
const core_2 = require("@urql/core");
|
|
6
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
7
|
+
const fs = tslib_1.__importStar(require("node:fs"));
|
|
6
8
|
const path = tslib_1.__importStar(require("node:path"));
|
|
7
9
|
const url_1 = require("../../build/utils/url");
|
|
8
10
|
const EasCommand_1 = tslib_1.__importDefault(require("../../commandUtils/EasCommand"));
|
|
@@ -84,26 +86,38 @@ class WorkflowRun extends EasCommand_1.default {
|
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
let projectArchiveBucketKey;
|
|
87
|
-
let easJsonBucketKey;
|
|
88
|
-
let packageJsonBucketKey;
|
|
89
|
+
let easJsonBucketKey = null;
|
|
90
|
+
let packageJsonBucketKey = null;
|
|
91
|
+
const easJsonPath = path.join(projectDir, 'eas.json');
|
|
92
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
89
93
|
try {
|
|
90
94
|
({ projectArchiveBucketKey } = await (0, uploadAccountScopedProjectSourceAsync_1.uploadAccountScopedProjectSourceAsync)({
|
|
91
95
|
graphqlClient,
|
|
92
96
|
vcsClient,
|
|
93
97
|
accountId: account.id,
|
|
94
98
|
}));
|
|
95
|
-
(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
99
|
+
if (await fileExistsAsync(easJsonPath)) {
|
|
100
|
+
({ fileBucketKey: easJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
|
|
101
|
+
graphqlClient,
|
|
102
|
+
accountId: account.id,
|
|
103
|
+
filePath: easJsonPath,
|
|
104
|
+
maxSizeBytes: 1024 * 1024,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
log_1.default.warn(`⚠ No ${chalk_1.default.bold('eas.json')} found in the project directory. Running ${chalk_1.default.bold('type: build')} jobs will not work. Run ${chalk_1.default.bold('eas build:configure')} to configure your project for builds.`);
|
|
109
|
+
}
|
|
110
|
+
if (await fileExistsAsync(packageJsonPath)) {
|
|
111
|
+
({ fileBucketKey: packageJsonBucketKey } = await (0, uploadAccountScopedFileAsync_1.uploadAccountScopedFileAsync)({
|
|
112
|
+
graphqlClient,
|
|
113
|
+
accountId: account.id,
|
|
114
|
+
filePath: packageJsonPath,
|
|
115
|
+
maxSizeBytes: 1024 * 1024,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
log_1.default.warn(`⚠ No ${chalk_1.default.bold('package.json')} found in the project directory. It is used to automatically infer best job configuration for your project. You may want to define ${chalk_1.default.bold('image')} property in your workflow to specify the image to use.`);
|
|
120
|
+
}
|
|
107
121
|
}
|
|
108
122
|
catch (err) {
|
|
109
123
|
log_1.default.error('Failed to upload project sources.');
|
|
@@ -205,3 +219,9 @@ async function waitForWorkflowRunToEndAsync(graphqlClient, { workflowRunId }) {
|
|
|
205
219
|
await (0, promise_1.sleepAsync)(10 /* seconds */ * 1000 /* milliseconds */);
|
|
206
220
|
}
|
|
207
221
|
}
|
|
222
|
+
async function fileExistsAsync(filePath) {
|
|
223
|
+
return await fs.promises
|
|
224
|
+
.access(filePath, fs.constants.F_OK)
|
|
225
|
+
.then(() => true)
|
|
226
|
+
.catch(() => false);
|
|
227
|
+
}
|
|
@@ -154,6 +154,8 @@ export type Account = {
|
|
|
154
154
|
billingPeriod: BillingPeriod;
|
|
155
155
|
/** (EAS Build) Builds associated with this account */
|
|
156
156
|
builds: Array<Build>;
|
|
157
|
+
/** Whether this account can enable SSO. */
|
|
158
|
+
canEnableSSO: Scalars['Boolean']['output'];
|
|
157
159
|
createdAt: Scalars['DateTime']['output'];
|
|
158
160
|
/** Environment secrets for an account */
|
|
159
161
|
environmentSecrets: Array<EnvironmentSecret>;
|
|
@@ -180,7 +182,10 @@ export type Account = {
|
|
|
180
182
|
name: Scalars['String']['output'];
|
|
181
183
|
/** Offers set on this account */
|
|
182
184
|
offers?: Maybe<Array<Offer>>;
|
|
183
|
-
/**
|
|
185
|
+
/**
|
|
186
|
+
* Owning User of this account if personal account
|
|
187
|
+
* @deprecated Deprecated in favor of ownerUserActor
|
|
188
|
+
*/
|
|
184
189
|
owner?: Maybe<User>;
|
|
185
190
|
/** Owning UserActor of this account if personal account */
|
|
186
191
|
ownerUserActor?: Maybe<UserActor>;
|
|
@@ -1073,6 +1078,7 @@ export type AndroidSubmissionConfig = {
|
|
|
1073
1078
|
export type AndroidSubmissionConfigInput = {
|
|
1074
1079
|
applicationIdentifier?: InputMaybe<Scalars['String']['input']>;
|
|
1075
1080
|
archiveUrl?: InputMaybe<Scalars['String']['input']>;
|
|
1081
|
+
changelog?: InputMaybe<Scalars['String']['input']>;
|
|
1076
1082
|
changesNotSentForReview?: InputMaybe<Scalars['Boolean']['input']>;
|
|
1077
1083
|
googleServiceAccountKeyId?: InputMaybe<Scalars['String']['input']>;
|
|
1078
1084
|
googleServiceAccountKeyJson?: InputMaybe<Scalars['String']['input']>;
|
|
@@ -1254,6 +1260,7 @@ export type App = Project & {
|
|
|
1254
1260
|
workerDeploymentsCrashes?: Maybe<WorkerDeploymentCrashes>;
|
|
1255
1261
|
workerDeploymentsRequest: WorkerDeploymentRequestEdge;
|
|
1256
1262
|
workerDeploymentsRequests?: Maybe<WorkerDeploymentRequests>;
|
|
1263
|
+
workflowRunGitBranchesPaginated: AppWorkflowRunGitBranchesConnection;
|
|
1257
1264
|
workflowRunsPaginated: AppWorkflowRunsConnection;
|
|
1258
1265
|
workflows: Array<Workflow>;
|
|
1259
1266
|
};
|
|
@@ -1467,9 +1474,18 @@ export type AppWorkerDeploymentsRequestsArgs = {
|
|
|
1467
1474
|
timespan: DatasetTimespan;
|
|
1468
1475
|
};
|
|
1469
1476
|
/** Represents an Exponent App (or Experience in legacy terms) */
|
|
1477
|
+
export type AppWorkflowRunGitBranchesPaginatedArgs = {
|
|
1478
|
+
after?: InputMaybe<Scalars['String']['input']>;
|
|
1479
|
+
before?: InputMaybe<Scalars['String']['input']>;
|
|
1480
|
+
filter?: InputMaybe<WorkflowRunGitBranchFilterInput>;
|
|
1481
|
+
first?: InputMaybe<Scalars['Int']['input']>;
|
|
1482
|
+
last?: InputMaybe<Scalars['Int']['input']>;
|
|
1483
|
+
};
|
|
1484
|
+
/** Represents an Exponent App (or Experience in legacy terms) */
|
|
1470
1485
|
export type AppWorkflowRunsPaginatedArgs = {
|
|
1471
1486
|
after?: InputMaybe<Scalars['String']['input']>;
|
|
1472
1487
|
before?: InputMaybe<Scalars['String']['input']>;
|
|
1488
|
+
filter?: InputMaybe<WorkflowRunFilterInput>;
|
|
1473
1489
|
first?: InputMaybe<Scalars['Int']['input']>;
|
|
1474
1490
|
last?: InputMaybe<Scalars['Int']['input']>;
|
|
1475
1491
|
};
|
|
@@ -1876,6 +1892,21 @@ export type AppWorkflowRunEdge = {
|
|
|
1876
1892
|
cursor: Scalars['String']['output'];
|
|
1877
1893
|
node: WorkflowRun;
|
|
1878
1894
|
};
|
|
1895
|
+
export type AppWorkflowRunGitBranchEdge = {
|
|
1896
|
+
__typename?: 'AppWorkflowRunGitBranchEdge';
|
|
1897
|
+
cursor: Scalars['String']['output'];
|
|
1898
|
+
node: AppWorkflowRunGitBranchNode;
|
|
1899
|
+
};
|
|
1900
|
+
export type AppWorkflowRunGitBranchNode = {
|
|
1901
|
+
__typename?: 'AppWorkflowRunGitBranchNode';
|
|
1902
|
+
lastRunAt: Scalars['DateTime']['output'];
|
|
1903
|
+
name: Scalars['String']['output'];
|
|
1904
|
+
};
|
|
1905
|
+
export type AppWorkflowRunGitBranchesConnection = {
|
|
1906
|
+
__typename?: 'AppWorkflowRunGitBranchesConnection';
|
|
1907
|
+
edges: Array<AppWorkflowRunGitBranchEdge>;
|
|
1908
|
+
pageInfo: PageInfo;
|
|
1909
|
+
};
|
|
1879
1910
|
export type AppWorkflowRunsConnection = {
|
|
1880
1911
|
__typename?: 'AppWorkflowRunsConnection';
|
|
1881
1912
|
edges: Array<AppWorkflowRunEdge>;
|
|
@@ -4433,6 +4464,7 @@ export type IosSubmissionConfigInput = {
|
|
|
4433
4464
|
ascApiKey?: InputMaybe<AscApiKeyInput>;
|
|
4434
4465
|
ascApiKeyId?: InputMaybe<Scalars['String']['input']>;
|
|
4435
4466
|
ascAppIdentifier: Scalars['String']['input'];
|
|
4467
|
+
changelog?: InputMaybe<Scalars['String']['input']>;
|
|
4436
4468
|
groups?: InputMaybe<Array<Scalars['String']['input']>>;
|
|
4437
4469
|
isVerboseFastlaneEnabled?: InputMaybe<Scalars['Boolean']['input']>;
|
|
4438
4470
|
};
|
|
@@ -4945,6 +4977,7 @@ export type PublicArtifacts = {
|
|
|
4945
4977
|
buildUrl?: Maybe<Scalars['String']['output']>;
|
|
4946
4978
|
};
|
|
4947
4979
|
export type PublishUpdateGroupInput = {
|
|
4980
|
+
assetHostOverride?: InputMaybe<Scalars['String']['input']>;
|
|
4948
4981
|
assetMapGroup?: InputMaybe<AssetMapGroup>;
|
|
4949
4982
|
awaitingCodeSigningInfo?: InputMaybe<Scalars['Boolean']['input']>;
|
|
4950
4983
|
branchId: Scalars['String']['input'];
|
|
@@ -4953,6 +4986,7 @@ export type PublishUpdateGroupInput = {
|
|
|
4953
4986
|
fingerprintInfoGroup?: InputMaybe<FingerprintInfoGroup>;
|
|
4954
4987
|
gitCommitHash?: InputMaybe<Scalars['String']['input']>;
|
|
4955
4988
|
isGitWorkingTreeDirty?: InputMaybe<Scalars['Boolean']['input']>;
|
|
4989
|
+
manifestHostOverride?: InputMaybe<Scalars['String']['input']>;
|
|
4956
4990
|
message?: InputMaybe<Scalars['String']['input']>;
|
|
4957
4991
|
rollBackToEmbeddedInfoGroup?: InputMaybe<UpdateRollBackToEmbeddedGroup>;
|
|
4958
4992
|
rolloutInfoGroup?: InputMaybe<UpdateRolloutInfoGroup>;
|
|
@@ -5922,6 +5956,7 @@ export type Update = ActivityTimelineProjectActivity & {
|
|
|
5922
5956
|
activityTimestamp: Scalars['DateTime']['output'];
|
|
5923
5957
|
actor?: Maybe<Actor>;
|
|
5924
5958
|
app: App;
|
|
5959
|
+
assetHostOverride?: Maybe<Scalars['String']['output']>;
|
|
5925
5960
|
assetMapUrl?: Maybe<Scalars['String']['output']>;
|
|
5926
5961
|
awaitingCodeSigningInfo: Scalars['Boolean']['output'];
|
|
5927
5962
|
branch: UpdateBranch;
|
|
@@ -5941,6 +5976,7 @@ export type Update = ActivityTimelineProjectActivity & {
|
|
|
5941
5976
|
isRollBackToEmbedded: Scalars['Boolean']['output'];
|
|
5942
5977
|
jobRun?: Maybe<JobRun>;
|
|
5943
5978
|
manifestFragment: Scalars['String']['output'];
|
|
5979
|
+
manifestHostOverride?: Maybe<Scalars['String']['output']>;
|
|
5944
5980
|
manifestPermalink: Scalars['String']['output'];
|
|
5945
5981
|
message?: Maybe<Scalars['String']['output']>;
|
|
5946
5982
|
platform: Scalars['String']['output'];
|
|
@@ -7052,6 +7088,7 @@ export type WorkerDeploymentRequestNode = {
|
|
|
7052
7088
|
requestId: Scalars['WorkerDeploymentRequestID']['output'];
|
|
7053
7089
|
requestTimestamp: Scalars['DateTime']['output'];
|
|
7054
7090
|
responseType: ResponseType;
|
|
7091
|
+
routerPath?: Maybe<Scalars['String']['output']>;
|
|
7055
7092
|
scriptName: Scalars['String']['output'];
|
|
7056
7093
|
search?: Maybe<Scalars['String']['output']>;
|
|
7057
7094
|
status: Scalars['Int']['output'];
|
|
@@ -7324,6 +7361,7 @@ export declare enum WorkflowJobType {
|
|
|
7324
7361
|
Deploy = "DEPLOY",
|
|
7325
7362
|
Fingerprint = "FINGERPRINT",
|
|
7326
7363
|
GetBuild = "GET_BUILD",
|
|
7364
|
+
MaestroCloud = "MAESTRO_CLOUD",
|
|
7327
7365
|
MaestroTest = "MAESTRO_TEST",
|
|
7328
7366
|
RequireApproval = "REQUIRE_APPROVAL",
|
|
7329
7367
|
Slack = "SLACK",
|
|
@@ -7331,7 +7369,7 @@ export declare enum WorkflowJobType {
|
|
|
7331
7369
|
Update = "UPDATE"
|
|
7332
7370
|
}
|
|
7333
7371
|
export type WorkflowProjectSourceInput = {
|
|
7334
|
-
easJsonBucketKey
|
|
7372
|
+
easJsonBucketKey?: InputMaybe<Scalars['String']['input']>;
|
|
7335
7373
|
packageJsonBucketKey?: InputMaybe<Scalars['String']['input']>;
|
|
7336
7374
|
projectArchiveBucketKey: Scalars['String']['input'];
|
|
7337
7375
|
type: WorkflowProjectSourceType;
|
|
@@ -7391,12 +7429,12 @@ export type WorkflowRun = ActivityTimelineProjectActivity & {
|
|
|
7391
7429
|
activityTimestamp: Scalars['DateTime']['output'];
|
|
7392
7430
|
actor?: Maybe<Actor>;
|
|
7393
7431
|
createdAt: Scalars['DateTime']['output'];
|
|
7432
|
+
durationSeconds?: Maybe<Scalars['Int']['output']>;
|
|
7394
7433
|
errors: Array<WorkflowRunError>;
|
|
7395
7434
|
gitCommitHash?: Maybe<Scalars['String']['output']>;
|
|
7396
7435
|
gitCommitMessage?: Maybe<Scalars['String']['output']>;
|
|
7397
7436
|
githubRepository?: Maybe<GitHubRepository>;
|
|
7398
7437
|
id: Scalars['ID']['output'];
|
|
7399
|
-
initiatingUser?: Maybe<User>;
|
|
7400
7438
|
jobs: Array<WorkflowJob>;
|
|
7401
7439
|
name: Scalars['String']['output'];
|
|
7402
7440
|
pullRequestNumber?: Maybe<Scalars['Int']['output']>;
|
|
@@ -7422,6 +7460,12 @@ export type WorkflowRunError = {
|
|
|
7422
7460
|
message: Scalars['String']['output'];
|
|
7423
7461
|
title?: Maybe<Scalars['String']['output']>;
|
|
7424
7462
|
};
|
|
7463
|
+
export type WorkflowRunFilterInput = {
|
|
7464
|
+
requestedGitRef?: InputMaybe<Scalars['String']['input']>;
|
|
7465
|
+
};
|
|
7466
|
+
export type WorkflowRunGitBranchFilterInput = {
|
|
7467
|
+
searchTerm?: InputMaybe<Scalars['String']['input']>;
|
|
7468
|
+
};
|
|
7425
7469
|
export type WorkflowRunInput = {
|
|
7426
7470
|
projectSource: WorkflowProjectSourceInput;
|
|
7427
7471
|
};
|
|
@@ -12040,7 +12084,11 @@ export type UpdatePublishMutation = {
|
|
|
12040
12084
|
isRollBackToEmbedded: boolean;
|
|
12041
12085
|
manifestPermalink: string;
|
|
12042
12086
|
gitCommitHash?: string | null;
|
|
12087
|
+
isGitWorkingTreeDirty: boolean;
|
|
12088
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
12043
12089
|
rolloutPercentage?: number | null;
|
|
12090
|
+
manifestHostOverride?: string | null;
|
|
12091
|
+
assetHostOverride?: string | null;
|
|
12044
12092
|
actor?: {
|
|
12045
12093
|
__typename: 'Robot';
|
|
12046
12094
|
firstName?: string | null;
|
|
@@ -12126,7 +12174,11 @@ export type SetRolloutPercentageMutation = {
|
|
|
12126
12174
|
isRollBackToEmbedded: boolean;
|
|
12127
12175
|
manifestPermalink: string;
|
|
12128
12176
|
gitCommitHash?: string | null;
|
|
12177
|
+
isGitWorkingTreeDirty: boolean;
|
|
12178
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
12129
12179
|
rolloutPercentage?: number | null;
|
|
12180
|
+
manifestHostOverride?: string | null;
|
|
12181
|
+
assetHostOverride?: string | null;
|
|
12130
12182
|
actor?: {
|
|
12131
12183
|
__typename: 'Robot';
|
|
12132
12184
|
firstName?: string | null;
|
|
@@ -12621,7 +12673,11 @@ export type BranchesByAppQuery = {
|
|
|
12621
12673
|
isRollBackToEmbedded: boolean;
|
|
12622
12674
|
manifestPermalink: string;
|
|
12623
12675
|
gitCommitHash?: string | null;
|
|
12676
|
+
isGitWorkingTreeDirty: boolean;
|
|
12677
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
12624
12678
|
rolloutPercentage?: number | null;
|
|
12679
|
+
manifestHostOverride?: string | null;
|
|
12680
|
+
assetHostOverride?: string | null;
|
|
12625
12681
|
actor?: {
|
|
12626
12682
|
__typename: 'Robot';
|
|
12627
12683
|
firstName?: string | null;
|
|
@@ -12735,7 +12791,11 @@ export type ViewBranchesOnUpdateChannelQuery = {
|
|
|
12735
12791
|
isRollBackToEmbedded: boolean;
|
|
12736
12792
|
manifestPermalink: string;
|
|
12737
12793
|
gitCommitHash?: string | null;
|
|
12794
|
+
isGitWorkingTreeDirty: boolean;
|
|
12795
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
12738
12796
|
rolloutPercentage?: number | null;
|
|
12797
|
+
manifestHostOverride?: string | null;
|
|
12798
|
+
assetHostOverride?: string | null;
|
|
12739
12799
|
actor?: {
|
|
12740
12800
|
__typename: 'Robot';
|
|
12741
12801
|
firstName?: string | null;
|
|
@@ -13240,7 +13300,11 @@ export type ViewUpdateChannelOnAppQuery = {
|
|
|
13240
13300
|
isRollBackToEmbedded: boolean;
|
|
13241
13301
|
manifestPermalink: string;
|
|
13242
13302
|
gitCommitHash?: string | null;
|
|
13303
|
+
isGitWorkingTreeDirty: boolean;
|
|
13304
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
13243
13305
|
rolloutPercentage?: number | null;
|
|
13306
|
+
manifestHostOverride?: string | null;
|
|
13307
|
+
assetHostOverride?: string | null;
|
|
13244
13308
|
actor?: {
|
|
13245
13309
|
__typename: 'Robot';
|
|
13246
13310
|
firstName?: string | null;
|
|
@@ -13323,7 +13387,11 @@ export type ViewUpdateChannelsOnAppQuery = {
|
|
|
13323
13387
|
isRollBackToEmbedded: boolean;
|
|
13324
13388
|
manifestPermalink: string;
|
|
13325
13389
|
gitCommitHash?: string | null;
|
|
13390
|
+
isGitWorkingTreeDirty: boolean;
|
|
13391
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
13326
13392
|
rolloutPercentage?: number | null;
|
|
13393
|
+
manifestHostOverride?: string | null;
|
|
13394
|
+
assetHostOverride?: string | null;
|
|
13327
13395
|
actor?: {
|
|
13328
13396
|
__typename: 'Robot';
|
|
13329
13397
|
firstName?: string | null;
|
|
@@ -13843,7 +13911,11 @@ export type ViewUpdatesByGroupQuery = {
|
|
|
13843
13911
|
isRollBackToEmbedded: boolean;
|
|
13844
13912
|
manifestPermalink: string;
|
|
13845
13913
|
gitCommitHash?: string | null;
|
|
13914
|
+
isGitWorkingTreeDirty: boolean;
|
|
13915
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
13846
13916
|
rolloutPercentage?: number | null;
|
|
13917
|
+
manifestHostOverride?: string | null;
|
|
13918
|
+
assetHostOverride?: string | null;
|
|
13847
13919
|
actor?: {
|
|
13848
13920
|
__typename: 'Robot';
|
|
13849
13921
|
firstName?: string | null;
|
|
@@ -13915,7 +13987,11 @@ export type ViewUpdateGroupsOnBranchQuery = {
|
|
|
13915
13987
|
isRollBackToEmbedded: boolean;
|
|
13916
13988
|
manifestPermalink: string;
|
|
13917
13989
|
gitCommitHash?: string | null;
|
|
13990
|
+
isGitWorkingTreeDirty: boolean;
|
|
13991
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
13918
13992
|
rolloutPercentage?: number | null;
|
|
13993
|
+
manifestHostOverride?: string | null;
|
|
13994
|
+
assetHostOverride?: string | null;
|
|
13919
13995
|
actor?: {
|
|
13920
13996
|
__typename: 'Robot';
|
|
13921
13997
|
firstName?: string | null;
|
|
@@ -13986,7 +14062,11 @@ export type ViewUpdateGroupsOnAppQuery = {
|
|
|
13986
14062
|
isRollBackToEmbedded: boolean;
|
|
13987
14063
|
manifestPermalink: string;
|
|
13988
14064
|
gitCommitHash?: string | null;
|
|
14065
|
+
isGitWorkingTreeDirty: boolean;
|
|
14066
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
13989
14067
|
rolloutPercentage?: number | null;
|
|
14068
|
+
manifestHostOverride?: string | null;
|
|
14069
|
+
assetHostOverride?: string | null;
|
|
13990
14070
|
actor?: {
|
|
13991
14071
|
__typename: 'Robot';
|
|
13992
14072
|
firstName?: string | null;
|
|
@@ -14050,7 +14130,11 @@ export type UpdateByIdQuery = {
|
|
|
14050
14130
|
isRollBackToEmbedded: boolean;
|
|
14051
14131
|
manifestPermalink: string;
|
|
14052
14132
|
gitCommitHash?: string | null;
|
|
14133
|
+
isGitWorkingTreeDirty: boolean;
|
|
14134
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
14053
14135
|
rolloutPercentage?: number | null;
|
|
14136
|
+
manifestHostOverride?: string | null;
|
|
14137
|
+
assetHostOverride?: string | null;
|
|
14054
14138
|
actor?: {
|
|
14055
14139
|
__typename: 'Robot';
|
|
14056
14140
|
firstName?: string | null;
|
|
@@ -14864,7 +14948,11 @@ export type UpdateFragment = {
|
|
|
14864
14948
|
isRollBackToEmbedded: boolean;
|
|
14865
14949
|
manifestPermalink: string;
|
|
14866
14950
|
gitCommitHash?: string | null;
|
|
14951
|
+
isGitWorkingTreeDirty: boolean;
|
|
14952
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
14867
14953
|
rolloutPercentage?: number | null;
|
|
14954
|
+
manifestHostOverride?: string | null;
|
|
14955
|
+
assetHostOverride?: string | null;
|
|
14868
14956
|
actor?: {
|
|
14869
14957
|
__typename: 'Robot';
|
|
14870
14958
|
firstName?: string | null;
|
|
@@ -14922,7 +15010,11 @@ export type UpdateBranchFragment = {
|
|
|
14922
15010
|
isRollBackToEmbedded: boolean;
|
|
14923
15011
|
manifestPermalink: string;
|
|
14924
15012
|
gitCommitHash?: string | null;
|
|
15013
|
+
isGitWorkingTreeDirty: boolean;
|
|
15014
|
+
environment?: EnvironmentVariableEnvironment | null;
|
|
14925
15015
|
rolloutPercentage?: number | null;
|
|
15016
|
+
manifestHostOverride?: string | null;
|
|
15017
|
+
assetHostOverride?: string | null;
|
|
14926
15018
|
actor?: {
|
|
14927
15019
|
__typename: 'Robot';
|
|
14928
15020
|
firstName?: string | null;
|
|
@@ -880,6 +880,7 @@ var WorkflowJobType;
|
|
|
880
880
|
WorkflowJobType["Deploy"] = "DEPLOY";
|
|
881
881
|
WorkflowJobType["Fingerprint"] = "FINGERPRINT";
|
|
882
882
|
WorkflowJobType["GetBuild"] = "GET_BUILD";
|
|
883
|
+
WorkflowJobType["MaestroCloud"] = "MAESTRO_CLOUD";
|
|
883
884
|
WorkflowJobType["MaestroTest"] = "MAESTRO_TEST";
|
|
884
885
|
WorkflowJobType["RequireApproval"] = "REQUIRE_APPROVAL";
|
|
885
886
|
WorkflowJobType["Slack"] = "SLACK";
|
|
@@ -15,6 +15,8 @@ exports.UpdateFragmentNode = (0, graphql_tag_1.default) `
|
|
|
15
15
|
isRollBackToEmbedded
|
|
16
16
|
manifestPermalink
|
|
17
17
|
gitCommitHash
|
|
18
|
+
isGitWorkingTreeDirty
|
|
19
|
+
environment
|
|
18
20
|
actor {
|
|
19
21
|
__typename
|
|
20
22
|
id
|
|
@@ -48,5 +50,7 @@ exports.UpdateFragmentNode = (0, graphql_tag_1.default) `
|
|
|
48
50
|
isDebugFingerprint
|
|
49
51
|
}
|
|
50
52
|
}
|
|
53
|
+
manifestHostOverride
|
|
54
|
+
assetHostOverride
|
|
51
55
|
}
|
|
52
56
|
`;
|
|
@@ -16,7 +16,7 @@ export declare function isExpoNotificationsInstalled(projectDir: string): boolea
|
|
|
16
16
|
export declare function isExpoInstalled(projectDir: string): boolean;
|
|
17
17
|
export declare function isExpoUpdatesInstalledAsDevDependency(projectDir: string): boolean;
|
|
18
18
|
export declare function isExpoUpdatesInstalledOrAvailable(projectDir: string, sdkVersion?: string): boolean;
|
|
19
|
-
export declare function isUsingEASUpdate(exp: ExpoConfig, projectId: string): boolean;
|
|
19
|
+
export declare function isUsingEASUpdate(exp: ExpoConfig, projectId: string, manifestHostOverride: string | null): boolean;
|
|
20
20
|
export declare function getExpoUpdatesPackageVersionIfInstalledAsync(projectDir: string): Promise<string | null>;
|
|
21
21
|
export declare function validateAppVersionRuntimePolicySupportAsync(projectDir: string, exp: ExpoConfig): Promise<void>;
|
|
22
22
|
export declare function enforceRollBackToEmbeddedUpdateSupportAsync(projectDir: string): Promise<void>;
|