eas-cli 16.32.0 → 18.0.3
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 +94 -92
- package/build/branch/queries.js +6 -1
- package/build/build/createContext.js +5 -3
- package/build/build/queries.js +13 -1
- package/build/build/runBuildAndSubmit.js +2 -0
- package/build/build/utils/devClient.d.ts +1 -0
- package/build/build/utils/devClient.js +3 -2
- package/build/build/utils/repository.js +3 -3
- package/build/build/utils/resourceClass.d.ts +1 -1
- package/build/build/utils/resourceClass.js +2 -2
- package/build/channel/queries.js +10 -1
- package/build/commandUtils/new/templates/AGENTS.md +0 -1
- package/build/commands/account/login.d.ts +1 -0
- package/build/commands/account/login.js +7 -2
- package/build/commands/env/create.js +5 -2
- package/build/commands/env/list.js +1 -5
- package/build/commands/update/index.js +2 -2
- package/build/commands/upload.js +3 -3
- package/build/credentials/ios/api/graphql/mutations/AppleDistributionCertificateMutation.js +1 -3
- package/build/devices/queries.js +23 -2
- package/build/graphql/mutations/EnvironmentVariableMutation.js +1 -4
- package/build/graphql/mutations/PublishMutation.js +1 -4
- package/build/graphql/mutations/UserPreferencesMutation.js +1 -3
- package/build/graphql/mutations/WorkflowRevisionMutation.js +2 -10
- package/build/graphql/queries/AppVersionQuery.js +1 -5
- package/build/log.js +1 -1
- package/build/ora.js +1 -1
- package/build/project/discourageExpoGoForProdAsync.d.ts +4 -0
- package/build/project/discourageExpoGoForProdAsync.js +46 -0
- package/build/rollout/actions/ManageRollout.js +5 -1
- package/build/rollout/actions/SelectRuntime.js +10 -1
- package/build/update/queries.js +28 -2
- package/build/user/SessionManager.d.ts +3 -2
- package/build/user/SessionManager.js +6 -6
- package/build/user/expoBrowserAuthFlowLauncher.d.ts +3 -0
- package/build/user/expoBrowserAuthFlowLauncher.js +129 -0
- package/build/user/fetchSessionSecretAndUserFromBrowserAuthFlow.d.ts +7 -0
- package/build/user/fetchSessionSecretAndUserFromBrowserAuthFlow.js +14 -0
- package/build/utils/prompts.js +3 -3
- package/build/utils/usage/checkForOverages.js +4 -2
- package/build/worker/mutations.js +2 -8
- package/oclif.manifest.json +8 -48
- package/package.json +61 -63
- package/build/commands/submit/upload-to-asc.d.ts +0 -12
- package/build/commands/submit/upload-to-asc.js +0 -217
- package/build/submit/ios/AscApiClient.d.ts +0 -247
- package/build/submit/ios/AscApiClient.js +0 -287
- package/build/user/expoSsoLauncher.d.ts +0 -3
- package/build/user/expoSsoLauncher.js +0 -98
- package/build/user/fetchSessionSecretAndSsoUser.d.ts +0 -5
- package/build/user/fetchSessionSecretAndSsoUser.js +0 -17
|
@@ -7,8 +7,8 @@ const core_1 = require("@oclif/core");
|
|
|
7
7
|
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
8
8
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
9
9
|
const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
|
|
10
|
-
const fetchSessionSecretAndSsoUser_1 = require("./fetchSessionSecretAndSsoUser");
|
|
11
10
|
const fetchSessionSecretAndUser_1 = require("./fetchSessionSecretAndUser");
|
|
11
|
+
const fetchSessionSecretAndUserFromBrowserAuthFlow_1 = require("./fetchSessionSecretAndUserFromBrowserAuthFlow");
|
|
12
12
|
const ApiV2Error_1 = require("../ApiV2Error");
|
|
13
13
|
const api_1 = require("../api");
|
|
14
14
|
const createGraphqlClient_1 = require("../commandUtils/context/contextUtils/createGraphqlClient");
|
|
@@ -102,15 +102,15 @@ class SessionManager {
|
|
|
102
102
|
*
|
|
103
103
|
* @deprecated Should not be used outside of context functions, except in the AccountLogin command.
|
|
104
104
|
*/
|
|
105
|
-
async showLoginPromptAsync({ nonInteractive = false, printNewLine = false, sso = false, } = {}) {
|
|
105
|
+
async showLoginPromptAsync({ nonInteractive = false, printNewLine = false, sso = false, browser = false, } = {}) {
|
|
106
106
|
if (nonInteractive) {
|
|
107
107
|
core_1.Errors.error(`Either log in with ${chalk_1.default.bold('eas login')} or set the ${chalk_1.default.bold('EXPO_TOKEN')} environment variable if you're using EAS CLI on CI (${(0, log_1.learnMore)('https://docs.expo.dev/accounts/programmatic-access/', { dim: false })})`);
|
|
108
108
|
}
|
|
109
109
|
if (printNewLine) {
|
|
110
110
|
log_1.default.newLine();
|
|
111
111
|
}
|
|
112
|
-
if (sso) {
|
|
113
|
-
await this.
|
|
112
|
+
if (sso || browser) {
|
|
113
|
+
await this.browserLoginAsync({ sso });
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
116
116
|
log_1.default.log(`Log in to EAS with email or username (exit and run ${chalk_1.default.bold('eas login --help')} to see other login options)`);
|
|
@@ -141,8 +141,8 @@ class SessionManager {
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
|
-
async
|
|
145
|
-
const { sessionSecret, id, username } = await (0,
|
|
144
|
+
async browserLoginAsync({ sso = false }) {
|
|
145
|
+
const { sessionSecret, id, username } = await (0, fetchSessionSecretAndUserFromBrowserAuthFlow_1.fetchSessionSecretAndUserFromBrowserAuthFlowAsync)({ sso });
|
|
146
146
|
await this.setSessionAsync({
|
|
147
147
|
sessionSecret,
|
|
148
148
|
userId: id,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSessionUsingBrowserAuthFlowAsync = getSessionUsingBrowserAuthFlowAsync;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
6
|
+
const better_opn_1 = tslib_1.__importDefault(require("better-opn"));
|
|
7
|
+
const crypto_1 = tslib_1.__importDefault(require("crypto"));
|
|
8
|
+
const http_1 = tslib_1.__importDefault(require("http"));
|
|
9
|
+
const api_1 = require("../api");
|
|
10
|
+
const fetch_1 = tslib_1.__importDefault(require("../fetch"));
|
|
11
|
+
const log_1 = tslib_1.__importDefault(require("../log"));
|
|
12
|
+
const CLIENT_ID = 'eas-cli';
|
|
13
|
+
function generateCodeVerifier() {
|
|
14
|
+
return crypto_1.default.randomBytes(32).toString('base64url');
|
|
15
|
+
}
|
|
16
|
+
function generateCodeChallenge(codeVerifier) {
|
|
17
|
+
return crypto_1.default.createHash('sha256').update(codeVerifier).digest('base64url');
|
|
18
|
+
}
|
|
19
|
+
function generateState() {
|
|
20
|
+
return crypto_1.default.randomBytes(32).toString('base64url');
|
|
21
|
+
}
|
|
22
|
+
async function exchangeCodeForSessionSecretAsync({ code, codeVerifier, redirectUri, }) {
|
|
23
|
+
const tokenUrl = `${(0, api_1.getExpoApiBaseUrl)()}/v2/auth/token`;
|
|
24
|
+
const response = await (0, fetch_1.default)(tokenUrl, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
},
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
grant_type: 'authorization_code',
|
|
31
|
+
code,
|
|
32
|
+
redirect_uri: redirectUri,
|
|
33
|
+
code_verifier: codeVerifier,
|
|
34
|
+
client_id: CLIENT_ID,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
const result = await response.json();
|
|
38
|
+
const sessionSecret = result?.data?.session_secret;
|
|
39
|
+
if (!sessionSecret) {
|
|
40
|
+
throw new Error('Failed to obtain session secret from token exchange.');
|
|
41
|
+
}
|
|
42
|
+
return sessionSecret;
|
|
43
|
+
}
|
|
44
|
+
async function getSessionUsingBrowserAuthFlowAsync({ sso = false }) {
|
|
45
|
+
const scheme = 'http';
|
|
46
|
+
const hostname = 'localhost';
|
|
47
|
+
const callbackPath = '/auth/callback';
|
|
48
|
+
const expoWebsiteUrl = (0, api_1.getExpoWebsiteBaseUrl)();
|
|
49
|
+
const codeVerifier = generateCodeVerifier();
|
|
50
|
+
const codeChallenge = generateCodeChallenge(codeVerifier);
|
|
51
|
+
const state = generateState();
|
|
52
|
+
const buildRedirectUri = (port) => `${scheme}://${hostname}:${port}${callbackPath}`;
|
|
53
|
+
const buildExpoLoginUrl = (port, sso) => {
|
|
54
|
+
// Note: we avoid URLSearchParams here because better-opn calls encodeURI()
|
|
55
|
+
// on the URL before passing it to AppleScript, which would double-encode
|
|
56
|
+
// the percent-encoded values from URLSearchParams.toString().
|
|
57
|
+
const params = [
|
|
58
|
+
`client_id=${CLIENT_ID}`,
|
|
59
|
+
`redirect_uri=${buildRedirectUri(port)}`,
|
|
60
|
+
`response_type=code`,
|
|
61
|
+
`code_challenge=${codeChallenge}`,
|
|
62
|
+
`code_challenge_method=S256`,
|
|
63
|
+
`state=${state}`,
|
|
64
|
+
`confirm_account=true`,
|
|
65
|
+
].join('&');
|
|
66
|
+
return `${expoWebsiteUrl}${sso ? '/sso-login' : '/login'}?${params}`;
|
|
67
|
+
};
|
|
68
|
+
// Start server and begin auth flow
|
|
69
|
+
const executeAuthFlow = () => {
|
|
70
|
+
return new Promise(async (resolve, reject) => {
|
|
71
|
+
const connections = new Set();
|
|
72
|
+
const server = http_1.default.createServer((request, response) => {
|
|
73
|
+
const redirectAndCleanup = (result) => {
|
|
74
|
+
const redirectUrl = `${expoWebsiteUrl}/oauth/expo-cli?result=${result}`;
|
|
75
|
+
response.writeHead(302, { Location: redirectUrl });
|
|
76
|
+
response.end();
|
|
77
|
+
server.close();
|
|
78
|
+
for (const connection of connections) {
|
|
79
|
+
connection.destroy();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const handleRequestAsync = async () => {
|
|
83
|
+
if (!(request.method === 'GET' && request.url?.includes('/auth/callback'))) {
|
|
84
|
+
throw new Error('Unexpected login response.');
|
|
85
|
+
}
|
|
86
|
+
const url = new URL(request.url, `http:${request.headers.host}`);
|
|
87
|
+
const code = url.searchParams.get('code');
|
|
88
|
+
const returnedState = url.searchParams.get('state');
|
|
89
|
+
if (!code) {
|
|
90
|
+
throw new Error('Request missing code search parameter.');
|
|
91
|
+
}
|
|
92
|
+
if (returnedState !== state) {
|
|
93
|
+
throw new Error('State mismatch. Possible CSRF attack.');
|
|
94
|
+
}
|
|
95
|
+
const address = server.address();
|
|
96
|
+
(0, assert_1.default)(address !== null && typeof address === 'object');
|
|
97
|
+
const redirectUri = buildRedirectUri(address.port);
|
|
98
|
+
const sessionSecret = await exchangeCodeForSessionSecretAsync({
|
|
99
|
+
code,
|
|
100
|
+
codeVerifier,
|
|
101
|
+
redirectUri,
|
|
102
|
+
});
|
|
103
|
+
resolve(sessionSecret);
|
|
104
|
+
redirectAndCleanup('success');
|
|
105
|
+
};
|
|
106
|
+
handleRequestAsync().catch(error => {
|
|
107
|
+
redirectAndCleanup('error');
|
|
108
|
+
reject(error);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
server.listen(0, hostname, () => {
|
|
112
|
+
log_1.default.log('Waiting for browser login...');
|
|
113
|
+
const address = server.address();
|
|
114
|
+
(0, assert_1.default)(address !== null && typeof address === 'object', 'Server address and port should be set after listening has begun');
|
|
115
|
+
const port = address.port;
|
|
116
|
+
const authorizeUrl = buildExpoLoginUrl(port, sso);
|
|
117
|
+
log_1.default.log(`If your browser doesn't automatically open, visit this link to log in: ${authorizeUrl}`);
|
|
118
|
+
void (0, better_opn_1.default)(authorizeUrl);
|
|
119
|
+
});
|
|
120
|
+
server.on('connection', connection => {
|
|
121
|
+
connections.add(connection);
|
|
122
|
+
connection.on('close', () => {
|
|
123
|
+
connections.delete(connection);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
return await executeAuthFlow();
|
|
129
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchSessionSecretAndUserFromBrowserAuthFlowAsync = fetchSessionSecretAndUserFromBrowserAuthFlowAsync;
|
|
4
|
+
const expoBrowserAuthFlowLauncher_1 = require("./expoBrowserAuthFlowLauncher");
|
|
5
|
+
const fetchUser_1 = require("./fetchUser");
|
|
6
|
+
async function fetchSessionSecretAndUserFromBrowserAuthFlowAsync({ sso = false }) {
|
|
7
|
+
const sessionSecret = await (0, expoBrowserAuthFlowLauncher_1.getSessionUsingBrowserAuthFlowAsync)({ sso });
|
|
8
|
+
const userData = await (0, fetchUser_1.fetchUserAsync)({ sessionSecret });
|
|
9
|
+
return {
|
|
10
|
+
sessionSecret,
|
|
11
|
+
id: userData.id,
|
|
12
|
+
username: userData.username,
|
|
13
|
+
};
|
|
14
|
+
}
|
package/build/utils/prompts.js
CHANGED
|
@@ -28,7 +28,7 @@ async function getProjectEnvironmentVariableEnvironmentsAsync(graphqlClient, pro
|
|
|
28
28
|
const CUSTOM_ENVIRONMENT_VALUE = '~~CUSTOM~~';
|
|
29
29
|
async function promptVariableTypeAsync(nonInteractive, initialType) {
|
|
30
30
|
if (nonInteractive) {
|
|
31
|
-
throw new Error('The `--type` flag must be set when running in `--non-interactive` mode.');
|
|
31
|
+
throw new Error('The `--type` flag must be set when running in `--non-interactive` mode. Valid values: string, file.');
|
|
32
32
|
}
|
|
33
33
|
const options = [
|
|
34
34
|
{
|
|
@@ -75,7 +75,7 @@ async function promptCustomEnvironmentAsync() {
|
|
|
75
75
|
}
|
|
76
76
|
async function promptVariableVisibilityAsync(nonInteractive, selectedVisibility) {
|
|
77
77
|
if (nonInteractive) {
|
|
78
|
-
throw new Error('The `--visibility` flag must be set when running in `--non-interactive` mode.');
|
|
78
|
+
throw new Error('The `--visibility` flag must be set when running in `--non-interactive` mode. Valid values: plaintext, sensitive, secret.');
|
|
79
79
|
}
|
|
80
80
|
return await (0, prompts_1.selectAsync)('Select visibility:', [
|
|
81
81
|
{
|
|
@@ -97,7 +97,7 @@ async function promptVariableVisibilityAsync(nonInteractive, selectedVisibility)
|
|
|
97
97
|
}
|
|
98
98
|
async function promptVariableEnvironmentAsync({ nonInteractive, selectedEnvironments, multiple = false, canEnterCustomEnvironment = false, graphqlClient, projectId, }) {
|
|
99
99
|
if (nonInteractive) {
|
|
100
|
-
throw new Error(
|
|
100
|
+
throw new Error(`The \`--environment\` flag must be set when running in \`--non-interactive\` mode. Default environments: ${DEFAULT_ENVIRONMENTS.join(', ')}.`);
|
|
101
101
|
}
|
|
102
102
|
let allEnvironments = DEFAULT_ENVIRONMENTS;
|
|
103
103
|
if (graphqlClient && projectId) {
|
|
@@ -42,8 +42,10 @@ function createProgressBar(percentUsed, width = 30) {
|
|
|
42
42
|
return `${filled}${empty}`;
|
|
43
43
|
}
|
|
44
44
|
function displayOverageWarning({ percentUsed, hasFreePlan, name, }) {
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
const message = chalk_1.default.bold(`You've used ${percentUsed}% of your included build credits for this month.`);
|
|
46
|
+
// Don't show progress bar at 100% - it's redundant when the limit is reached
|
|
47
|
+
const progressBar = percentUsed < 100 ? ' ' + createProgressBar(percentUsed) : '';
|
|
48
|
+
log_1.default.warn(message + progressBar);
|
|
47
49
|
const billingUrl = `https://expo.dev/accounts/${name}/settings/billing`;
|
|
48
50
|
const warning = hasFreePlan
|
|
49
51
|
? "You won't be able to start new builds once you reach the limit. " +
|
|
@@ -14,10 +14,7 @@ exports.DeploymentsMutation = {
|
|
|
14
14
|
.mutation((0, graphql_tag_1.default) `
|
|
15
15
|
mutation createDeploymentUrlMutation($appId: ID!, $deploymentIdentifier: ID) {
|
|
16
16
|
deployments {
|
|
17
|
-
createSignedDeploymentUrl(
|
|
18
|
-
appId: $appId
|
|
19
|
-
deploymentIdentifier: $deploymentIdentifier
|
|
20
|
-
) {
|
|
17
|
+
createSignedDeploymentUrl(appId: $appId, deploymentIdentifier: $deploymentIdentifier) {
|
|
21
18
|
pendingWorkerDeploymentId
|
|
22
19
|
deploymentIdentifier
|
|
23
20
|
url
|
|
@@ -95,10 +92,7 @@ exports.DeploymentsMutation = {
|
|
|
95
92
|
.mutation((0, graphql_tag_1.default) `
|
|
96
93
|
mutation DeleteDeployment($appId: ID!, $deploymentIdentifier: ID!) {
|
|
97
94
|
deployments {
|
|
98
|
-
deleteWorkerDeploymentByIdentifier(
|
|
99
|
-
appId: $appId
|
|
100
|
-
deploymentIdentifier: $deploymentIdentifier
|
|
101
|
-
) {
|
|
95
|
+
deleteWorkerDeploymentByIdentifier(appId: $appId, deploymentIdentifier: $deploymentIdentifier) {
|
|
102
96
|
id
|
|
103
97
|
deploymentIdentifier
|
|
104
98
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "18.0.3",
|
|
3
3
|
"commands": {
|
|
4
4
|
"analytics": {
|
|
5
5
|
"id": "analytics",
|
|
@@ -298,6 +298,13 @@
|
|
|
298
298
|
"char": "s",
|
|
299
299
|
"description": "Login with SSO",
|
|
300
300
|
"allowNo": false
|
|
301
|
+
},
|
|
302
|
+
"browser": {
|
|
303
|
+
"name": "browser",
|
|
304
|
+
"type": "boolean",
|
|
305
|
+
"char": "b",
|
|
306
|
+
"description": "Login with your browser",
|
|
307
|
+
"allowNo": false
|
|
301
308
|
}
|
|
302
309
|
},
|
|
303
310
|
"args": {},
|
|
@@ -3287,53 +3294,6 @@
|
|
|
3287
3294
|
"vcsClient": {}
|
|
3288
3295
|
}
|
|
3289
3296
|
},
|
|
3290
|
-
"submit:upload-to-asc": {
|
|
3291
|
-
"id": "submit:upload-to-asc",
|
|
3292
|
-
"strict": true,
|
|
3293
|
-
"pluginName": "eas-cli",
|
|
3294
|
-
"pluginAlias": "eas-cli",
|
|
3295
|
-
"pluginType": "core",
|
|
3296
|
-
"hidden": true,
|
|
3297
|
-
"aliases": [],
|
|
3298
|
-
"flags": {
|
|
3299
|
-
"path": {
|
|
3300
|
-
"name": "path",
|
|
3301
|
-
"type": "option",
|
|
3302
|
-
"description": "Path to the IPA file",
|
|
3303
|
-
"required": true,
|
|
3304
|
-
"multiple": false
|
|
3305
|
-
},
|
|
3306
|
-
"key": {
|
|
3307
|
-
"name": "key",
|
|
3308
|
-
"type": "option",
|
|
3309
|
-
"description": "Path to the ASC API Key JSON file",
|
|
3310
|
-
"required": true,
|
|
3311
|
-
"multiple": false
|
|
3312
|
-
},
|
|
3313
|
-
"app-id": {
|
|
3314
|
-
"name": "app-id",
|
|
3315
|
-
"type": "option",
|
|
3316
|
-
"description": "App Store Connect App ID (e.g. 1491144534)",
|
|
3317
|
-
"required": true,
|
|
3318
|
-
"multiple": false
|
|
3319
|
-
},
|
|
3320
|
-
"bundle-version": {
|
|
3321
|
-
"name": "bundle-version",
|
|
3322
|
-
"type": "option",
|
|
3323
|
-
"description": "CFBundleVersion (Build Version, e.g. 13)",
|
|
3324
|
-
"required": true,
|
|
3325
|
-
"multiple": false
|
|
3326
|
-
},
|
|
3327
|
-
"bundle-short-version": {
|
|
3328
|
-
"name": "bundle-short-version",
|
|
3329
|
-
"type": "option",
|
|
3330
|
-
"description": "CFBundleShortVersionString (Marketing Version, e.g. 1.0.0)",
|
|
3331
|
-
"required": true,
|
|
3332
|
-
"multiple": false
|
|
3333
|
-
}
|
|
3334
|
-
},
|
|
3335
|
-
"args": {}
|
|
3336
|
-
},
|
|
3337
3297
|
"update:configure": {
|
|
3338
3298
|
"id": "update:configure",
|
|
3339
3299
|
"description": "configure the project to support EAS Update",
|
package/package.json
CHANGED
|
@@ -1,22 +1,57 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eas-cli",
|
|
3
|
+
"version": "18.0.3",
|
|
3
4
|
"description": "EAS command line tool",
|
|
4
|
-
"
|
|
5
|
+
"keywords": [
|
|
6
|
+
"cli",
|
|
7
|
+
"eas",
|
|
8
|
+
"expo"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/expo/eas-cli",
|
|
11
|
+
"bugs": "https://github.com/expo/eas-cli/issues",
|
|
12
|
+
"license": "MIT",
|
|
5
13
|
"author": "Expo <support@expo.dev>",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/expo/eas-cli.git",
|
|
17
|
+
"directory": "packages/eas-cli"
|
|
18
|
+
},
|
|
6
19
|
"bin": {
|
|
7
20
|
"eas": "./bin/run"
|
|
8
21
|
},
|
|
9
|
-
"
|
|
22
|
+
"files": [
|
|
23
|
+
"/bin",
|
|
24
|
+
"/build",
|
|
25
|
+
"/oclif.manifest.json",
|
|
26
|
+
"/schema"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"postpack": "rimraf oclif.manifest.json",
|
|
30
|
+
"prepack": "yarn rebuild && node ./scripts/prepack.js",
|
|
31
|
+
"rebuild": "rimraf build *.tsbuildinfo && yarn build",
|
|
32
|
+
"build": "yarn typecheck-for-build && yarn copy-new-templates",
|
|
33
|
+
"build-allow-unused": "tsc --project tsconfig.allowUnused.json",
|
|
34
|
+
"watch": "yarn typecheck-for-build --watch --preserveWatchOutput",
|
|
35
|
+
"watch-allow-unused": "yarn build-allow-unused --watch --preserveWatchOutput",
|
|
36
|
+
"typecheck": "tsc",
|
|
37
|
+
"typecheck-for-build": "tsc --project tsconfig.build.json",
|
|
38
|
+
"test": "jest",
|
|
39
|
+
"version": "yarn run -T oclif readme && node scripts/patch-readme && git add README.md",
|
|
40
|
+
"generate-graphql-code": "graphql-codegen --config graphql-codegen.yml",
|
|
41
|
+
"verify-graphql-code": "./scripts/verify-graphql.sh",
|
|
42
|
+
"clean": "rimraf dist build tmp node_modules yarn-error.log *.tsbuildinfo",
|
|
43
|
+
"copy-new-templates": "rimraf build/commandUtils/new/templates && mkdir -p build/commandUtils/new && cp -r src/commandUtils/new/templates build/commandUtils/new"
|
|
44
|
+
},
|
|
10
45
|
"dependencies": {
|
|
11
46
|
"@expo/apple-utils": "2.1.13",
|
|
12
47
|
"@expo/code-signing-certificates": "0.0.5",
|
|
13
48
|
"@expo/config": "10.0.6",
|
|
14
49
|
"@expo/config-plugins": "9.0.12",
|
|
15
|
-
"@expo/eas-build-job": "
|
|
16
|
-
"@expo/eas-json": "
|
|
50
|
+
"@expo/eas-build-job": "18.0.2",
|
|
51
|
+
"@expo/eas-json": "18.0.2",
|
|
17
52
|
"@expo/env": "^1.0.0",
|
|
18
53
|
"@expo/json-file": "8.3.3",
|
|
19
|
-
"@expo/logger": "
|
|
54
|
+
"@expo/logger": "18.0.1",
|
|
20
55
|
"@expo/multipart-body-parser": "2.0.0",
|
|
21
56
|
"@expo/osascript": "2.1.4",
|
|
22
57
|
"@expo/package-manager": "1.9.10",
|
|
@@ -28,7 +63,7 @@
|
|
|
28
63
|
"@expo/results": "1.0.0",
|
|
29
64
|
"@expo/rudder-sdk-node": "1.1.1",
|
|
30
65
|
"@expo/spawn-async": "1.7.2",
|
|
31
|
-
"@expo/steps": "
|
|
66
|
+
"@expo/steps": "18.0.2",
|
|
32
67
|
"@expo/timeago.js": "1.0.0",
|
|
33
68
|
"@oclif/core": "^1.26.2",
|
|
34
69
|
"@oclif/plugin-autocomplete": "^2.3.10",
|
|
@@ -61,7 +96,6 @@
|
|
|
61
96
|
"invariant": "^2.2.2",
|
|
62
97
|
"jks-js": "1.1.0",
|
|
63
98
|
"joi": "17.11.0",
|
|
64
|
-
"jsonwebtoken": "9.0.0",
|
|
65
99
|
"keychain": "1.5.0",
|
|
66
100
|
"log-symbols": "4.1.0",
|
|
67
101
|
"mime": "3.0.0",
|
|
@@ -83,7 +117,7 @@
|
|
|
83
117
|
"semver": "7.5.4",
|
|
84
118
|
"set-interval-async": "3.0.3",
|
|
85
119
|
"slash": "3.0.0",
|
|
86
|
-
"tar": "
|
|
120
|
+
"tar": "7.5.7",
|
|
87
121
|
"tar-stream": "3.1.7",
|
|
88
122
|
"terminal-link": "2.1.1",
|
|
89
123
|
"ts-deepmerge": "6.2.0",
|
|
@@ -100,7 +134,7 @@
|
|
|
100
134
|
"@graphql-codegen/introspection": "4.0.0",
|
|
101
135
|
"@graphql-codegen/typescript": "4.0.1",
|
|
102
136
|
"@graphql-codegen/typescript-operations": "4.0.1",
|
|
103
|
-
"@tsconfig/
|
|
137
|
+
"@tsconfig/node20": "20.1.8",
|
|
104
138
|
"@types/cli-progress": "3.11.5",
|
|
105
139
|
"@types/dateformat": "3.0.1",
|
|
106
140
|
"@types/diff": "6.0.0",
|
|
@@ -109,7 +143,6 @@
|
|
|
109
143
|
"@types/fs-extra": "11.0.4",
|
|
110
144
|
"@types/getenv": "^1.0.0",
|
|
111
145
|
"@types/invariant": "^2.2.37",
|
|
112
|
-
"@types/jsonwebtoken": "8.5.1",
|
|
113
146
|
"@types/mime": "3.0.1",
|
|
114
147
|
"@types/node-fetch": "2.6.12",
|
|
115
148
|
"@types/node-forge": "1.3.1",
|
|
@@ -125,6 +158,7 @@
|
|
|
125
158
|
"axios": "1.11.0",
|
|
126
159
|
"eslint-plugin-graphql": "4.0.0",
|
|
127
160
|
"express": "4.20.0",
|
|
161
|
+
"jest": "29.7.0",
|
|
128
162
|
"memfs": "3.4.13",
|
|
129
163
|
"mockdate": "3.0.5",
|
|
130
164
|
"nock": "13.4.0",
|
|
@@ -133,23 +167,13 @@
|
|
|
133
167
|
"ts-node": "10.9.2",
|
|
134
168
|
"typescript": "5.5.4"
|
|
135
169
|
},
|
|
136
|
-
"engines": {
|
|
137
|
-
"node": ">=18.0.0"
|
|
138
|
-
},
|
|
139
|
-
"files": [
|
|
140
|
-
"/bin",
|
|
141
|
-
"/build",
|
|
142
|
-
"/oclif.manifest.json",
|
|
143
|
-
"/schema"
|
|
144
|
-
],
|
|
145
|
-
"homepage": "https://github.com/expo/eas-cli",
|
|
146
|
-
"keywords": [
|
|
147
|
-
"expo",
|
|
148
|
-
"eas",
|
|
149
|
-
"cli"
|
|
150
|
-
],
|
|
151
|
-
"license": "MIT",
|
|
152
170
|
"oclif": {
|
|
171
|
+
"additionalHelpFlags": [
|
|
172
|
+
"-h"
|
|
173
|
+
],
|
|
174
|
+
"additionalVersionFlags": [
|
|
175
|
+
"-v"
|
|
176
|
+
],
|
|
153
177
|
"bin": "eas",
|
|
154
178
|
"commands": "./build/commands",
|
|
155
179
|
"plugins": [
|
|
@@ -173,6 +197,9 @@
|
|
|
173
197
|
"device": {
|
|
174
198
|
"description": "manage Apple devices for Internal Distribution"
|
|
175
199
|
},
|
|
200
|
+
"env": {
|
|
201
|
+
"description": "manage project and account environment variables"
|
|
202
|
+
},
|
|
176
203
|
"metadata": {
|
|
177
204
|
"description": "manage store configuration"
|
|
178
205
|
},
|
|
@@ -185,9 +212,6 @@
|
|
|
185
212
|
"secret": {
|
|
186
213
|
"description": "manage project and account secrets"
|
|
187
214
|
},
|
|
188
|
-
"env": {
|
|
189
|
-
"description": "manage project and account environment variables"
|
|
190
|
-
},
|
|
191
215
|
"update": {
|
|
192
216
|
"description": "manage individual updates"
|
|
193
217
|
},
|
|
@@ -198,13 +222,9 @@
|
|
|
198
222
|
"description": "manage workflows"
|
|
199
223
|
}
|
|
200
224
|
},
|
|
201
|
-
"warn-if-update-available": {
|
|
202
|
-
"timeoutInDays": 0.5,
|
|
203
|
-
"message": "<%= chalk('★') %> <%= chalk.bold(config.name + '@' + latest) %> <%= chalk.bold('is now available.') %>\n<%= chalk.dim('To upgrade, run:') %>\n<%= chalk.dim(chalk.bold('npm install -g eas-cli')) %>\n<%= chalk.dim('Proceeding with outdated version.') %>\n"
|
|
204
|
-
},
|
|
205
225
|
"update": {
|
|
206
226
|
"node": {
|
|
207
|
-
"version": "
|
|
227
|
+
"version": "20.19.4"
|
|
208
228
|
},
|
|
209
229
|
"s3": {
|
|
210
230
|
"templates": {
|
|
@@ -215,35 +235,13 @@
|
|
|
215
235
|
}
|
|
216
236
|
}
|
|
217
237
|
},
|
|
218
|
-
"
|
|
219
|
-
"-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
"-v"
|
|
223
|
-
]
|
|
224
|
-
},
|
|
225
|
-
"repository": {
|
|
226
|
-
"type": "git",
|
|
227
|
-
"url": "https://github.com/expo/eas-cli.git",
|
|
228
|
-
"directory": "packages/eas-cli"
|
|
238
|
+
"warn-if-update-available": {
|
|
239
|
+
"message": "<%= chalk('★') %> <%= chalk.bold(config.name + '@' + latest) %> <%= chalk.bold('is now available.') %>\n<%= chalk.dim('To upgrade, run:') %>\n<%= chalk.dim(chalk.bold('npm install -g eas-cli')) %>\n<%= chalk.dim('Proceeding with outdated version.') %>\n",
|
|
240
|
+
"timeoutInDays": 0.5
|
|
241
|
+
}
|
|
229
242
|
},
|
|
230
|
-
"
|
|
231
|
-
"
|
|
232
|
-
"prepack": "yarn rebuild && node ./scripts/prepack.js",
|
|
233
|
-
"rebuild": "rimraf build && yarn build",
|
|
234
|
-
"pretarball-ci": "./scripts/pretarball-ci.sh",
|
|
235
|
-
"build": "yarn typecheck-for-build && yarn copy-new-templates",
|
|
236
|
-
"build-allow-unused": "tsc --project tsconfig.allowUnused.json",
|
|
237
|
-
"watch": "yarn typecheck-for-build --watch --preserveWatchOutput",
|
|
238
|
-
"watch-allow-unused": "yarn build-allow-unused --watch --preserveWatchOutput",
|
|
239
|
-
"typecheck": "tsc",
|
|
240
|
-
"typecheck-for-build": "tsc --project tsconfig.build.json",
|
|
241
|
-
"test": "jest",
|
|
242
|
-
"version": "yarn oclif readme && node scripts/patch-readme && git add README.md",
|
|
243
|
-
"generate-graphql-code": "graphql-codegen --config graphql-codegen.yml",
|
|
244
|
-
"verify-graphql-code": "./scripts/verify-graphql.sh",
|
|
245
|
-
"clean": "rimraf dist build tmp node_modules yarn-error.log",
|
|
246
|
-
"copy-new-templates": "rimraf build/commandUtils/new/templates && mkdir -p build/commandUtils/new && cp -r src/commandUtils/new/templates build/commandUtils/new"
|
|
243
|
+
"engines": {
|
|
244
|
+
"node": ">=20.0.0"
|
|
247
245
|
},
|
|
248
|
-
"gitHead": "
|
|
246
|
+
"gitHead": "d5da4f416791938a7c1ffdaf83a7c644e7aa6261"
|
|
249
247
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import EasCommand from '../../commandUtils/EasCommand';
|
|
2
|
-
export default class SubmitUploadToAsc extends EasCommand {
|
|
3
|
-
static hidden: boolean;
|
|
4
|
-
static flags: {
|
|
5
|
-
path: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
6
|
-
key: import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
7
|
-
'app-id': import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
8
|
-
'bundle-version': import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
9
|
-
'bundle-short-version': import("@oclif/core/lib/interfaces").OptionFlag<string>;
|
|
10
|
-
};
|
|
11
|
-
runAsync(): Promise<void>;
|
|
12
|
-
}
|