eas-cli 3.13.1 → 3.13.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.
Files changed (132) hide show
  1. package/README.md +68 -67
  2. package/build/build/build.js +16 -6
  3. package/build/build/createContext.d.ts +2 -2
  4. package/build/build/createContext.js +2 -2
  5. package/build/build/local.js +1 -1
  6. package/build/build/runBuildAndSubmit.d.ts +1 -1
  7. package/build/build/runBuildAndSubmit.js +6 -5
  8. package/build/build/types.d.ts +1 -0
  9. package/build/build/types.js +1 -0
  10. package/build/build/utils/formatBuild.js +2 -0
  11. package/build/build/utils/printBuildInfo.js +1 -1
  12. package/build/commandUtils/EasCommand.d.ts +7 -6
  13. package/build/commandUtils/EasCommand.js +7 -5
  14. package/build/commandUtils/context/DynamicProjectConfigContextField.d.ts +5 -2
  15. package/build/commandUtils/context/DynamicProjectConfigContextField.js +24 -5
  16. package/build/commandUtils/context/{OptionalProjectConfigContextField.d.ts → OptionalPrivateProjectConfigContextField.d.ts} +1 -1
  17. package/build/commandUtils/context/{OptionalProjectConfigContextField.js → OptionalPrivateProjectConfigContextField.js} +5 -5
  18. package/build/commandUtils/context/{ProjectConfigContextField.d.ts → PrivateProjectConfigContextField.d.ts} +1 -1
  19. package/build/commandUtils/context/{ProjectConfigContextField.js → PrivateProjectConfigContextField.js} +5 -4
  20. package/build/commandUtils/context/contextUtils/getProjectIdAsync.js +1 -1
  21. package/build/commands/branch/create.d.ts +1 -1
  22. package/build/commands/branch/create.js +1 -1
  23. package/build/commands/branch/delete.d.ts +1 -1
  24. package/build/commands/branch/delete.js +1 -1
  25. package/build/commands/branch/list.d.ts +1 -1
  26. package/build/commands/branch/list.js +1 -1
  27. package/build/commands/branch/rename.d.ts +1 -1
  28. package/build/commands/branch/rename.js +1 -1
  29. package/build/commands/branch/view.d.ts +1 -1
  30. package/build/commands/branch/view.js +1 -1
  31. package/build/commands/build/cancel.d.ts +1 -1
  32. package/build/commands/build/cancel.js +2 -2
  33. package/build/commands/build/configure.d.ts +1 -1
  34. package/build/commands/build/configure.js +1 -1
  35. package/build/commands/build/index.d.ts +2 -1
  36. package/build/commands/build/index.js +2 -2
  37. package/build/commands/build/inspect.d.ts +2 -1
  38. package/build/commands/build/inspect.js +2 -2
  39. package/build/commands/build/internal.d.ts +2 -1
  40. package/build/commands/build/internal.js +2 -2
  41. package/build/commands/build/list.d.ts +1 -1
  42. package/build/commands/build/list.js +5 -1
  43. package/build/commands/build/resign.d.ts +2 -1
  44. package/build/commands/build/resign.js +2 -2
  45. package/build/commands/build/run.d.ts +1 -1
  46. package/build/commands/build/run.js +1 -1
  47. package/build/commands/build/version/get.d.ts +2 -1
  48. package/build/commands/build/version/get.js +2 -2
  49. package/build/commands/build/version/set.d.ts +2 -1
  50. package/build/commands/build/version/set.js +2 -2
  51. package/build/commands/build/version/sync.d.ts +2 -1
  52. package/build/commands/build/version/sync.js +2 -2
  53. package/build/commands/build/view.d.ts +1 -1
  54. package/build/commands/build/view.js +1 -1
  55. package/build/commands/channel/create.d.ts +1 -1
  56. package/build/commands/channel/create.js +1 -1
  57. package/build/commands/channel/delete.d.ts +1 -1
  58. package/build/commands/channel/delete.js +1 -1
  59. package/build/commands/channel/edit.d.ts +1 -1
  60. package/build/commands/channel/edit.js +1 -1
  61. package/build/commands/channel/list.d.ts +1 -1
  62. package/build/commands/channel/list.js +1 -1
  63. package/build/commands/channel/rollout.d.ts +1 -1
  64. package/build/commands/channel/rollout.js +1 -1
  65. package/build/commands/channel/view.d.ts +1 -1
  66. package/build/commands/channel/view.js +1 -1
  67. package/build/commands/config.d.ts +2 -1
  68. package/build/commands/config.js +2 -3
  69. package/build/commands/credentials.d.ts +3 -2
  70. package/build/commands/credentials.js +2 -2
  71. package/build/commands/device/create.d.ts +1 -1
  72. package/build/commands/device/create.js +2 -2
  73. package/build/commands/device/delete.d.ts +1 -1
  74. package/build/commands/device/delete.js +1 -1
  75. package/build/commands/device/list.d.ts +1 -1
  76. package/build/commands/device/list.js +1 -1
  77. package/build/commands/device/rename.d.ts +1 -1
  78. package/build/commands/device/rename.js +1 -1
  79. package/build/commands/device/view.d.ts +1 -1
  80. package/build/commands/device/view.js +1 -1
  81. package/build/commands/metadata/pull.d.ts +1 -1
  82. package/build/commands/metadata/pull.js +1 -1
  83. package/build/commands/metadata/push.d.ts +1 -1
  84. package/build/commands/metadata/push.js +1 -1
  85. package/build/commands/open.d.ts +1 -1
  86. package/build/commands/open.js +1 -1
  87. package/build/commands/project/info.d.ts +1 -1
  88. package/build/commands/project/info.js +1 -1
  89. package/build/commands/project/init.js +3 -3
  90. package/build/commands/secret/create.d.ts +1 -1
  91. package/build/commands/secret/create.js +1 -1
  92. package/build/commands/secret/delete.d.ts +1 -1
  93. package/build/commands/secret/delete.js +1 -1
  94. package/build/commands/secret/list.d.ts +1 -1
  95. package/build/commands/secret/list.js +1 -1
  96. package/build/commands/secret/push.d.ts +1 -1
  97. package/build/commands/secret/push.js +1 -1
  98. package/build/commands/submit.d.ts +1 -1
  99. package/build/commands/submit.js +1 -1
  100. package/build/commands/update/configure.d.ts +1 -1
  101. package/build/commands/update/configure.js +1 -1
  102. package/build/commands/update/index.d.ts +2 -1
  103. package/build/commands/update/index.js +44 -11
  104. package/build/commands/update/list.d.ts +1 -1
  105. package/build/commands/update/list.js +1 -1
  106. package/build/commands/update/republish.d.ts +1 -1
  107. package/build/commands/update/republish.js +1 -1
  108. package/build/commands/update/roll-back-to-embedded.d.ts +2 -1
  109. package/build/commands/update/roll-back-to-embedded.js +4 -8
  110. package/build/commands/webhook/create.d.ts +1 -1
  111. package/build/commands/webhook/create.js +1 -1
  112. package/build/commands/webhook/delete.d.ts +1 -1
  113. package/build/commands/webhook/delete.js +1 -1
  114. package/build/commands/webhook/list.d.ts +1 -1
  115. package/build/commands/webhook/list.js +1 -1
  116. package/build/credentials/context.d.ts +0 -3
  117. package/build/credentials/context.js +1 -10
  118. package/build/credentials/manager/HelperActions.d.ts +1 -1
  119. package/build/credentials/manager/ManageAndroid.js +1 -1
  120. package/build/credentials/manager/ManageIos.js +1 -1
  121. package/build/credentials/manager/SelectPlatform.d.ts +2 -2
  122. package/build/credentials/manager/SelectPlatform.js +2 -2
  123. package/build/graphql/generated.d.ts +50 -10
  124. package/build/graphql/generated.js +2 -0
  125. package/build/project/expoConfig.d.ts +7 -2
  126. package/build/project/expoConfig.js +10 -3
  127. package/build/project/publish.d.ts +8 -1
  128. package/build/project/publish.js +19 -5
  129. package/build/update/android/UpdatesModule.d.ts +3 -0
  130. package/build/update/android/UpdatesModule.js +11 -0
  131. package/oclif.manifest.json +1 -1
  132. package/package.json +2 -2
@@ -12,7 +12,7 @@ const prompts_1 = require("../../prompts");
12
12
  class EnvironmentSecretDelete extends EasCommand_1.default {
13
13
  async runAsync() {
14
14
  let { flags: { id, 'non-interactive': nonInteractive }, } = await this.parse(EnvironmentSecretDelete);
15
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretDelete, {
15
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretDelete, {
16
16
  nonInteractive,
17
17
  });
18
18
  let secret;
@@ -3,7 +3,7 @@ export default class EnvironmentSecretList extends EasCommand {
3
3
  static description: string;
4
4
  static contextDefinition: {
5
5
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
6
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
6
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
7
7
  };
8
8
  runAsync(): Promise<void>;
9
9
  }
@@ -10,7 +10,7 @@ const log_1 = tslib_1.__importDefault(require("../../log"));
10
10
  const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
11
11
  class EnvironmentSecretList extends EasCommand_1.default {
12
12
  async runAsync() {
13
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretList, {
13
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretList, {
14
14
  nonInteractive: true,
15
15
  });
16
16
  const secrets = await EnvironmentSecretsQuery_1.EnvironmentSecretsQuery.allAsync(graphqlClient, projectId);
@@ -10,7 +10,7 @@ export default class EnvironmentSecretPush extends EasCommand {
10
10
  };
11
11
  static contextDefinition: {
12
12
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
13
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
13
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
14
14
  };
15
15
  runAsync(): Promise<void>;
16
16
  }
@@ -20,7 +20,7 @@ const intersection_1 = tslib_1.__importDefault(require("../../utils/expodash/int
20
20
  class EnvironmentSecretPush extends EasCommand_1.default {
21
21
  async runAsync() {
22
22
  const { flags: { scope, force, 'env-file': maybeEnvFilePath, 'non-interactive': nonInteractive }, } = await this.parse(EnvironmentSecretPush);
23
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretPush, {
23
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(EnvironmentSecretPush, {
24
24
  nonInteractive,
25
25
  });
26
26
  const projectDisplayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
@@ -17,7 +17,7 @@ export default class Submit extends EasCommand {
17
17
  analytics: import("../commandUtils/context/AnalyticsContextField").default;
18
18
  projectDir: import("../commandUtils/context/ProjectDirContextField").default;
19
19
  loggedIn: import("../commandUtils/context/LoggedInContextField").default;
20
- projectConfig: import("../commandUtils/context/ProjectConfigContextField").default;
20
+ privateProjectConfig: import("../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
21
21
  };
22
22
  runAsync(): Promise<void>;
23
23
  private sanitizeFlags;
@@ -18,7 +18,7 @@ const statuspageService_1 = require("../utils/statuspageService");
18
18
  class Submit extends EasCommand_1.default {
19
19
  async runAsync() {
20
20
  const { flags: rawFlags } = await this.parse(Submit);
21
- const { loggedIn: { actor, graphqlClient }, projectConfig: { exp, projectId, projectDir }, analytics, } = await this.getContextAsync(Submit, {
21
+ const { loggedIn: { actor, graphqlClient }, privateProjectConfig: { exp, projectId, projectDir }, analytics, } = await this.getContextAsync(Submit, {
22
22
  nonInteractive: false,
23
23
  });
24
24
  const flags = this.sanitizeFlags(rawFlags);
@@ -7,7 +7,7 @@ export default class UpdateConfigure extends EasCommand {
7
7
  };
8
8
  static contextDefinition: {
9
9
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
10
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
10
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
11
11
  };
12
12
  runAsync(): Promise<void>;
13
13
  }
@@ -12,7 +12,7 @@ class UpdateConfigure extends EasCommand_1.default {
12
12
  async runAsync() {
13
13
  const { flags } = await this.parse(UpdateConfigure);
14
14
  const platform = flags.platform;
15
- const { projectConfig: { projectId, exp, projectDir }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateConfigure, {
15
+ const { privateProjectConfig: { projectId, exp, projectDir }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateConfigure, {
16
16
  nonInteractive: flags['non-interactive'],
17
17
  });
18
18
  log_1.default.log('💡 The following process will configure your project to run EAS Update. These changes only apply to your local project files and you can safely revert them at any time.');
@@ -18,7 +18,8 @@ export default class UpdatePublish extends EasCommand {
18
18
  };
19
19
  static contextDefinition: {
20
20
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
21
- getDynamicProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicProjectConfigContextField;
21
+ getDynamicPublicProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicPublicProjectConfigContextField;
22
+ getDynamicPrivateProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicPrivateProjectConfigContextField;
22
23
  };
23
24
  runAsync(): Promise<void>;
24
25
  private sanitizeFlags;
@@ -21,6 +21,7 @@ const publish_1 = require("../../project/publish");
21
21
  const configure_1 = require("../../update/configure");
22
22
  const utils_1 = require("../../update/utils");
23
23
  const code_signing_1 = require("../../utils/code-signing");
24
+ const areSetsEqual_1 = tslib_1.__importDefault(require("../../utils/expodash/areSetsEqual"));
24
25
  const uniqBy_1 = tslib_1.__importDefault(require("../../utils/expodash/uniqBy"));
25
26
  const formatFields_1 = tslib_1.__importDefault(require("../../utils/formatFields"));
26
27
  const json_1 = require("../../utils/json");
@@ -31,15 +32,13 @@ class UpdatePublish extends EasCommand_1.default {
31
32
  const { flags: rawFlags } = await this.parse(UpdatePublish);
32
33
  const paginatedQueryOptions = (0, pagination_1.getPaginatedQueryOptions)(rawFlags);
33
34
  const { auto: autoFlag, platform: platformFlag, channelName: channelNameArg, updateMessage: updateMessageArg, inputDir, skipBundler, clearCache, privateKeyPath, json: jsonFlag, nonInteractive, branchName: branchNameArg, } = this.sanitizeFlags(rawFlags);
34
- const { getDynamicProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdatePublish, {
35
+ const { getDynamicPublicProjectConfigAsync, getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdatePublish, {
35
36
  nonInteractive,
36
37
  });
37
38
  if (jsonFlag) {
38
39
  (0, json_1.enableJsonOutput)();
39
40
  }
40
- const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicProjectConfigAsync({
41
- isPublicConfig: true,
42
- });
41
+ const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
43
42
  await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
44
43
  await (0, configure_1.ensureEASUpdateIsConfiguredAsync)(graphqlClient, {
45
44
  exp: expPossiblyWithoutEasUpdateConfigured,
@@ -47,10 +46,8 @@ class UpdatePublish extends EasCommand_1.default {
47
46
  projectDir,
48
47
  projectId,
49
48
  });
50
- const { exp } = await getDynamicProjectConfigAsync({ isPublicConfig: true });
51
- const { exp: expPrivate } = await getDynamicProjectConfigAsync({
52
- isPublicConfig: false,
53
- });
49
+ const { exp } = await getDynamicPublicProjectConfigAsync();
50
+ const { exp: expPrivate } = await getDynamicPrivateProjectConfigAsync();
54
51
  const codeSigningInfo = await (0, code_signing_1.getCodeSigningInfoAsync)(expPrivate, privateKeyPath);
55
52
  const branchName = await (0, publish_1.getBranchNameForCommandAsync)({
56
53
  graphqlClient,
@@ -90,9 +87,45 @@ class UpdatePublish extends EasCommand_1.default {
90
87
  const collectedAssets = await (0, publish_1.collectAssetsAsync)(distRoot);
91
88
  const assets = (0, publish_1.filterExportedPlatformsByFlag)(collectedAssets, platformFlag);
92
89
  realizedPlatforms = Object.keys(assets);
93
- const uploadResults = await (0, publish_1.uploadAssetsAsync)(graphqlClient, assets, projectId, (totalAssets, missingAssets) => {
94
- assetSpinner.text = `Uploading (${totalAssets - missingAssets}/${totalAssets})`;
95
- });
90
+ // Timeout mechanism:
91
+ // - Start with 60 second timeout. 60 seconds is chosen because the cloud function that processes
92
+ // uploaded assets has a timeout of 60 seconds.
93
+ // - Each time one or more assets reports as ready, reset the timeout to 60 seconds.
94
+ // - Start upload. Internally, uploadAssetsAsync uploads them all and then checks for successful
95
+ // processing every (5 + n) seconds with a linear backoff of n + 1 second.
96
+ // - At the same time as upload is started, start timeout checker which checks every 1 second to see
97
+ // if timeout has been reached. When timeout expires, send a cancellation signal to currently running
98
+ // upload function call to instruct it to stop uploading or checking for successful processing.
99
+ let lastUploadedStorageKeys = new Set();
100
+ let lastAssetUploadResults = [];
101
+ let timeAtWhichToTimeout = Date.now() + 60 * 1000; // sixty seconds from now
102
+ const cancelationToken = { isCanceledOrFinished: false };
103
+ const uploadResults = await Promise.race([
104
+ (0, publish_1.uploadAssetsAsync)(graphqlClient, assets, projectId, cancelationToken, assetUploadResults => {
105
+ const currentUploadedStorageKeys = new Set(assetUploadResults.filter(r => r.finished).map(r => r.asset.storageKey));
106
+ if (!(0, areSetsEqual_1.default)(currentUploadedStorageKeys, lastUploadedStorageKeys)) {
107
+ timeAtWhichToTimeout = Date.now() + 60 * 1000; // reset timeout to sixty seconds from now
108
+ lastUploadedStorageKeys = currentUploadedStorageKeys;
109
+ lastAssetUploadResults = assetUploadResults;
110
+ }
111
+ const totalAssets = assetUploadResults.length;
112
+ const missingAssetCount = assetUploadResults.filter(a => !a.finished).length;
113
+ assetSpinner.text = `Uploading (${totalAssets - missingAssetCount}/${totalAssets})`;
114
+ }),
115
+ (async () => {
116
+ while (Date.now() < timeAtWhichToTimeout) {
117
+ if (cancelationToken.isCanceledOrFinished) {
118
+ break;
119
+ }
120
+ await new Promise(res => setTimeout(res, 1000)); // wait 1 second
121
+ }
122
+ cancelationToken.isCanceledOrFinished = true;
123
+ const timedOutAssets = lastAssetUploadResults
124
+ .filter(r => !r.finished)
125
+ .map(r => { var _b; return `\n- ${(_b = r.asset.originalPath) !== null && _b !== void 0 ? _b : r.asset.path}`; });
126
+ throw new Error(`Asset processing timed out for assets: ${timedOutAssets}`);
127
+ })(),
128
+ ]);
96
129
  uploadedAssetCount = uploadResults.uniqueUploadedAssetCount;
97
130
  assetLimitPerUpdateGroup = uploadResults.assetLimitPerUpdateGroup;
98
131
  unsortedUpdateInfoGroups = await (0, publish_1.buildUnsortedUpdateInfoGroupAsync)(assets, exp);
@@ -11,7 +11,7 @@ export default class UpdateList extends EasCommand {
11
11
  };
12
12
  static contextDefinition: {
13
13
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
14
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
14
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
15
15
  };
16
16
  runAsync(): Promise<void>;
17
17
  }
@@ -13,7 +13,7 @@ class UpdateList extends EasCommand_1.default {
13
13
  async runAsync() {
14
14
  const { flags } = await this.parse(UpdateList);
15
15
  const { branch: branchFlag, all, json: jsonFlag, 'non-interactive': nonInteractive } = flags;
16
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateList, {
16
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateList, {
17
17
  nonInteractive,
18
18
  });
19
19
  const paginatedQueryOptions = (0, pagination_1.getPaginatedQueryOptions)(flags);
@@ -31,7 +31,7 @@ export default class UpdateRepublish extends EasCommand {
31
31
  };
32
32
  static contextDefinition: {
33
33
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
34
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
34
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
35
35
  };
36
36
  runAsync(): Promise<void>;
37
37
  sanitizeFlags(rawFlags: UpdateRepublishRawFlags): UpdateRepublishFlags;
@@ -23,7 +23,7 @@ class UpdateRepublish extends EasCommand_1.default {
23
23
  async runAsync() {
24
24
  const { flags: rawFlags } = await this.parse(UpdateRepublish);
25
25
  const flags = this.sanitizeFlags(rawFlags);
26
- const { projectConfig: { exp, projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateRepublish, {
26
+ const { privateProjectConfig: { exp, projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateRepublish, {
27
27
  nonInteractive: flags.nonInteractive,
28
28
  });
29
29
  if (flags.json) {
@@ -14,7 +14,8 @@ export default class UpdateRollBackToEmbedded extends EasCommand {
14
14
  };
15
15
  static contextDefinition: {
16
16
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
17
- getDynamicProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicProjectConfigContextField;
17
+ getDynamicPublicProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicPublicProjectConfigContextField;
18
+ getDynamicPrivateProjectConfigAsync: import("../../commandUtils/context/DynamicProjectConfigContextField").DynamicPrivateProjectConfigContextField;
18
19
  };
19
20
  runAsync(): Promise<void>;
20
21
  private publishRollbacksAsync;
@@ -31,15 +31,13 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
31
31
  const { flags: rawFlags } = await this.parse(UpdateRollBackToEmbedded);
32
32
  const paginatedQueryOptions = (0, pagination_1.getPaginatedQueryOptions)(rawFlags);
33
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, {
34
+ const { getDynamicPublicProjectConfigAsync, getDynamicPrivateProjectConfigAsync, loggedIn: { graphqlClient }, } = await this.getContextAsync(UpdateRollBackToEmbedded, {
35
35
  nonInteractive,
36
36
  });
37
37
  if (jsonFlag) {
38
38
  (0, json_1.enableJsonOutput)();
39
39
  }
40
- const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicProjectConfigAsync({
41
- isPublicConfig: true,
42
- });
40
+ const { exp: expPossiblyWithoutEasUpdateConfigured, projectId, projectDir, } = await getDynamicPublicProjectConfigAsync();
43
41
  await (0, statuspageService_1.maybeWarnAboutEasOutagesAsync)(graphqlClient, [generated_1.StatuspageServiceName.EasUpdate]);
44
42
  await (0, configure_1.ensureEASUpdateIsConfiguredAsync)(graphqlClient, {
45
43
  exp: expPossiblyWithoutEasUpdateConfigured,
@@ -47,10 +45,8 @@ class UpdateRollBackToEmbedded extends EasCommand_1.default {
47
45
  projectDir,
48
46
  projectId,
49
47
  });
50
- const { exp } = await getDynamicProjectConfigAsync({ isPublicConfig: true });
51
- const { exp: expPrivate } = await getDynamicProjectConfigAsync({
52
- isPublicConfig: false,
53
- });
48
+ const { exp } = await getDynamicPublicProjectConfigAsync();
49
+ const { exp: expPrivate } = await getDynamicPrivateProjectConfigAsync();
54
50
  const codeSigningInfo = await (0, code_signing_1.getCodeSigningInfoAsync)(expPrivate, privateKeyPath);
55
51
  const branchName = await (0, publish_1.getBranchNameForCommandAsync)({
56
52
  graphqlClient,
@@ -10,7 +10,7 @@ export default class WebhookCreate extends EasCommand {
10
10
  };
11
11
  static contextDefinition: {
12
12
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
13
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
13
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
14
14
  };
15
15
  runAsync(): Promise<void>;
16
16
  }
@@ -12,7 +12,7 @@ const input_1 = require("../../webhooks/input");
12
12
  class WebhookCreate extends EasCommand_1.default {
13
13
  async runAsync() {
14
14
  const { flags } = await this.parse(WebhookCreate);
15
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookCreate, {
15
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookCreate, {
16
16
  nonInteractive: flags['non-interactive'],
17
17
  });
18
18
  const webhookInputParams = await (0, input_1.prepareInputParamsAsync)(flags);
@@ -11,7 +11,7 @@ export default class WebhookDelete extends EasCommand {
11
11
  };
12
12
  static contextDefinition: {
13
13
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
14
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
14
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
15
15
  };
16
16
  runAsync(): Promise<void>;
17
17
  }
@@ -16,7 +16,7 @@ const formatWebhook_1 = require("../../webhooks/formatWebhook");
16
16
  class WebhookDelete extends EasCommand_1.default {
17
17
  async runAsync() {
18
18
  let { args: { ID: webhookId }, flags: { 'non-interactive': nonInteractive }, } = await this.parse(WebhookDelete);
19
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookDelete, {
19
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookDelete, {
20
20
  nonInteractive,
21
21
  });
22
22
  let webhook = webhookId && (await WebhookQuery_1.WebhookQuery.byIdAsync(graphqlClient, webhookId));
@@ -8,7 +8,7 @@ export default class WebhookList extends EasCommand {
8
8
  };
9
9
  static contextDefinition: {
10
10
  loggedIn: import("../../commandUtils/context/LoggedInContextField").default;
11
- projectConfig: import("../../commandUtils/context/ProjectConfigContextField").default;
11
+ privateProjectConfig: import("../../commandUtils/context/PrivateProjectConfigContextField").PrivateProjectConfigContextField;
12
12
  };
13
13
  runAsync(): Promise<void>;
14
14
  }
@@ -19,7 +19,7 @@ class WebhookList extends EasCommand_1.default {
19
19
  if (json) {
20
20
  (0, json_1.enableJsonOutput)();
21
21
  }
22
- const { projectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookList, {
22
+ const { privateProjectConfig: { projectId }, loggedIn: { graphqlClient }, } = await this.getContextAsync(WebhookList, {
23
23
  nonInteractive: true,
24
24
  });
25
25
  const projectDisplayName = await (0, projectUtils_1.getDisplayNameForProjectIdAsync)(graphqlClient, projectId);
@@ -34,9 +34,6 @@ export declare class CredentialsContext {
34
34
  analytics: Analytics;
35
35
  env?: Env;
36
36
  });
37
- static getExpoConfigInProject(projectDir: string, { env }?: {
38
- env?: Env;
39
- }): ExpoConfig | null;
40
37
  get hasProjectContext(): boolean;
41
38
  get exp(): ExpoConfig;
42
39
  get projectId(): string;
@@ -26,15 +26,6 @@ class CredentialsContext {
26
26
  this.nonInteractive = (_a = options.nonInteractive) !== null && _a !== void 0 ? _a : false;
27
27
  this.projectInfo = options.projectInfo;
28
28
  }
29
- static getExpoConfigInProject(projectDir, { env } = {}) {
30
- try {
31
- return (0, expoConfig_1.getExpoConfig)(projectDir, { env });
32
- }
33
- catch {
34
- // ignore error, context might be created outside of expo project
35
- return null;
36
- }
37
- }
38
29
  get hasProjectContext() {
39
30
  return !!this.projectInfo;
40
31
  }
@@ -51,7 +42,7 @@ class CredentialsContext {
51
42
  return;
52
43
  }
53
44
  // trigger getConfig error
54
- (0, expoConfig_1.getExpoConfig)(this.options.projectDir);
45
+ (0, expoConfig_1.getPrivateExpoConfig)(this.options.projectDir);
55
46
  }
56
47
  async bestEffortAppStoreAuthenticateAsync() {
57
48
  if (this.appStore.authCtx || !this.shouldAskAuthenticateAppStore) {
@@ -8,7 +8,7 @@ export interface Action<T = void> {
8
8
  graphqlClient: ExpoGraphqlClient;
9
9
  analytics: Analytics;
10
10
  projectInfo: CredentialsContextProjectInfo | null;
11
- getDynamicProjectConfigAsync: DynamicConfigContextFn;
11
+ getDynamicPrivateProjectConfigAsync: DynamicConfigContextFn;
12
12
  runAsync(ctx: CredentialsContext): Promise<T>;
13
13
  }
14
14
  export declare class PressAnyKeyToContinue {
@@ -40,7 +40,7 @@ class ManageAndroid {
40
40
  : null;
41
41
  let projectInfo = null;
42
42
  if (hasProjectContext) {
43
- const { exp, projectId } = await this.callingAction.getDynamicProjectConfigAsync({
43
+ const { exp, projectId } = await this.callingAction.getDynamicPrivateProjectConfigAsync({
44
44
  env: buildProfile === null || buildProfile === void 0 ? void 0 : buildProfile.env,
45
45
  });
46
46
  projectInfo = { exp, projectId };
@@ -50,7 +50,7 @@ class ManageIos {
50
50
  : null;
51
51
  let projectInfo = null;
52
52
  if (this.callingAction.projectInfo) {
53
- const { exp, projectId } = await this.callingAction.getDynamicProjectConfigAsync({
53
+ const { exp, projectId } = await this.callingAction.getDynamicPrivateProjectConfigAsync({
54
54
  env: buildProfile === null || buildProfile === void 0 ? void 0 : buildProfile.env,
55
55
  });
56
56
  projectInfo = { exp, projectId };
@@ -8,8 +8,8 @@ export declare class SelectPlatform {
8
8
  readonly graphqlClient: ExpoGraphqlClient;
9
9
  readonly analytics: Analytics;
10
10
  readonly projectInfo: CredentialsContextProjectInfo | null;
11
- readonly getDynamicProjectConfigAsync: DynamicConfigContextFn;
11
+ readonly getDynamicPrivateProjectConfigAsync: DynamicConfigContextFn;
12
12
  private readonly flagPlatform?;
13
- constructor(actor: Actor, graphqlClient: ExpoGraphqlClient, analytics: Analytics, projectInfo: CredentialsContextProjectInfo | null, getDynamicProjectConfigAsync: DynamicConfigContextFn, flagPlatform?: string | undefined);
13
+ constructor(actor: Actor, graphqlClient: ExpoGraphqlClient, analytics: Analytics, projectInfo: CredentialsContextProjectInfo | null, getDynamicPrivateProjectConfigAsync: DynamicConfigContextFn, flagPlatform?: string | undefined);
14
14
  runAsync(): Promise<void>;
15
15
  }
@@ -5,12 +5,12 @@ const platform_1 = require("../../platform");
5
5
  const ManageAndroid_1 = require("./ManageAndroid");
6
6
  const ManageIos_1 = require("./ManageIos");
7
7
  class SelectPlatform {
8
- constructor(actor, graphqlClient, analytics, projectInfo, getDynamicProjectConfigAsync, flagPlatform) {
8
+ constructor(actor, graphqlClient, analytics, projectInfo, getDynamicPrivateProjectConfigAsync, flagPlatform) {
9
9
  this.actor = actor;
10
10
  this.graphqlClient = graphqlClient;
11
11
  this.analytics = analytics;
12
12
  this.projectInfo = projectInfo;
13
- this.getDynamicProjectConfigAsync = getDynamicProjectConfigAsync;
13
+ this.getDynamicPrivateProjectConfigAsync = getDynamicPrivateProjectConfigAsync;
14
14
  this.flagPlatform = flagPlatform;
15
15
  }
16
16
  async runAsync() {
@@ -642,6 +642,8 @@ export type AndroidAppCredentialsMutation = {
642
642
  __typename?: 'AndroidAppCredentialsMutation';
643
643
  /** Create a set of credentials for an Android app */
644
644
  createAndroidAppCredentials: AndroidAppCredentials;
645
+ /** Delete a set of credentials for an Android app */
646
+ deleteAndroidAppCredentials: DeleteAndroidAppCredentialsResult;
645
647
  /** Set the FCM push key to be used in an Android app */
646
648
  setFcm: AndroidAppCredentials;
647
649
  /** Set the Google Service Account Key to be used for submitting an Android app */
@@ -652,6 +654,9 @@ export type AndroidAppCredentialsMutationCreateAndroidAppCredentialsArgs = {
652
654
  appId: Scalars['ID'];
653
655
  applicationIdentifier: Scalars['String'];
654
656
  };
657
+ export type AndroidAppCredentialsMutationDeleteAndroidAppCredentialsArgs = {
658
+ id: Scalars['ID'];
659
+ };
655
660
  export type AndroidAppCredentialsMutationSetFcmArgs = {
656
661
  fcmId: Scalars['ID'];
657
662
  id: Scalars['ID'];
@@ -869,6 +874,8 @@ export type App = Project & {
869
874
  /** @deprecated No longer supported */
870
875
  iconUrl?: Maybe<Scalars['String']>;
871
876
  id: Scalars['ID'];
877
+ /** App query field for querying EAS Insights about this app */
878
+ insights: AppInsights;
872
879
  /** iOS app credentials for the project */
873
880
  iosAppCredentials: Array<IosAppCredentials>;
874
881
  /** Whether the latest classic update publish is using a deprecated SDK version */
@@ -1139,6 +1146,21 @@ export type AppInput = {
1139
1146
  privacy: AppPrivacy;
1140
1147
  projectName: Scalars['String'];
1141
1148
  };
1149
+ export type AppInsights = {
1150
+ __typename?: 'AppInsights';
1151
+ totalUniqueUsers?: Maybe<Scalars['Int']>;
1152
+ uniqueUsersByAppVersionOverTime: UniqueUsersOverTimeData;
1153
+ uniqueUsersByPlatformOverTime: UniqueUsersOverTimeData;
1154
+ };
1155
+ export type AppInsightsTotalUniqueUsersArgs = {
1156
+ timespan: InsightsTimespan;
1157
+ };
1158
+ export type AppInsightsUniqueUsersByAppVersionOverTimeArgs = {
1159
+ timespan: InsightsTimespan;
1160
+ };
1161
+ export type AppInsightsUniqueUsersByPlatformOverTimeArgs = {
1162
+ timespan: InsightsTimespan;
1163
+ };
1142
1164
  export type AppMutation = {
1143
1165
  __typename?: 'AppMutation';
1144
1166
  /** Create an unpublished app */
@@ -1646,6 +1668,7 @@ export type Build = ActivityTimelineProjectActivity & BuildOrBuildJob & {
1646
1668
  __typename?: 'Build';
1647
1669
  activityTimestamp: Scalars['DateTime'];
1648
1670
  actor?: Maybe<Actor>;
1671
+ app: App;
1649
1672
  appBuildVersion?: Maybe<Scalars['String']>;
1650
1673
  appVersion?: Maybe<Scalars['String']>;
1651
1674
  artifacts?: Maybe<BuildArtifacts>;
@@ -2031,7 +2054,8 @@ export declare enum BuildStatus {
2031
2054
  Finished = "FINISHED",
2032
2055
  InProgress = "IN_PROGRESS",
2033
2056
  InQueue = "IN_QUEUE",
2034
- New = "NEW"
2057
+ New = "NEW",
2058
+ PendingCancel = "PENDING_CANCEL"
2035
2059
  }
2036
2060
  export declare enum BuildTrigger {
2037
2061
  EasCli = "EAS_CLI",
@@ -2155,6 +2179,10 @@ export type DeleteAccountSsoConfigurationResult = {
2155
2179
  __typename?: 'DeleteAccountSSOConfigurationResult';
2156
2180
  id: Scalars['ID'];
2157
2181
  };
2182
+ export type DeleteAndroidAppCredentialsResult = {
2183
+ __typename?: 'DeleteAndroidAppCredentialsResult';
2184
+ id: Scalars['ID'];
2185
+ };
2158
2186
  export type DeleteAndroidKeystoreResult = {
2159
2187
  __typename?: 'DeleteAndroidKeystoreResult';
2160
2188
  id: Scalars['ID'];
@@ -2640,6 +2668,10 @@ export type GoogleServiceAccountKeyMutationCreateGoogleServiceAccountKeyArgs = {
2640
2668
  export type GoogleServiceAccountKeyMutationDeleteGoogleServiceAccountKeyArgs = {
2641
2669
  id: Scalars['ID'];
2642
2670
  };
2671
+ export type InsightsTimespan = {
2672
+ end: Scalars['DateTime'];
2673
+ start: Scalars['DateTime'];
2674
+ };
2643
2675
  export type Invoice = {
2644
2676
  __typename?: 'Invoice';
2645
2677
  /** The total amount due for the invoice, in cents */
@@ -2800,13 +2832,6 @@ export type IosAppCredentialsMutationSetPushKeyArgs = {
2800
2832
  id: Scalars['ID'];
2801
2833
  pushKeyId: Scalars['ID'];
2802
2834
  };
2803
- export type IosAppCredentialsQuery = {
2804
- __typename?: 'IosAppCredentialsQuery';
2805
- byId: IosAppCredentials;
2806
- };
2807
- export type IosAppCredentialsQueryByIdArgs = {
2808
- iosAppCredentialsId: Scalars['ID'];
2809
- };
2810
2835
  /** @deprecated Use developmentClient option instead. */
2811
2836
  export declare enum IosBuildType {
2812
2837
  DevelopmentClient = "DEVELOPMENT_CLIENT",
@@ -2936,6 +2961,17 @@ export type LeaveAccountResult = {
2936
2961
  __typename?: 'LeaveAccountResult';
2937
2962
  success: Scalars['Boolean'];
2938
2963
  };
2964
+ export type LineChartData = {
2965
+ __typename?: 'LineChartData';
2966
+ datasets: Array<LineDataset>;
2967
+ labels: Array<Scalars['String']>;
2968
+ };
2969
+ export type LineDataset = {
2970
+ __typename?: 'LineDataset';
2971
+ data: Array<Maybe<Scalars['Int']>>;
2972
+ id: Scalars['ID'];
2973
+ label: Scalars['String'];
2974
+ };
2939
2975
  export declare enum MailchimpAudience {
2940
2976
  ExpoDevelopers = "EXPO_DEVELOPERS"
2941
2977
  }
@@ -3049,6 +3085,7 @@ export type MeteredBillingStatus = {
3049
3085
  };
3050
3086
  export declare enum NotificationEvent {
3051
3087
  BuildComplete = "BUILD_COMPLETE",
3088
+ BuildPlanCreditThresholdExceeded = "BUILD_PLAN_CREDIT_THRESHOLD_EXCEEDED",
3052
3089
  SubmissionComplete = "SUBMISSION_COMPLETE"
3053
3090
  }
3054
3091
  export type NotificationSubscription = {
@@ -3413,8 +3450,6 @@ export type RootQuery = {
3413
3450
  githubApp: GitHubAppQuery;
3414
3451
  /** Top-level query object for querying Stripe Invoices. */
3415
3452
  invoice: InvoiceQuery;
3416
- /** Top-level query object for querying IosAppCredentials. */
3417
- iosAppCredentials: IosAppCredentialsQuery;
3418
3453
  /**
3419
3454
  * If authenticated as a typical end user, this is the appropriate top-level
3420
3455
  * query object
@@ -3906,6 +3941,10 @@ export type TimelineActivityFilterInput = {
3906
3941
  releaseChannels?: InputMaybe<Array<Scalars['String']>>;
3907
3942
  types?: InputMaybe<Array<ActivityTimelineProjectActivityType>>;
3908
3943
  };
3944
+ export type UniqueUsersOverTimeData = {
3945
+ __typename?: 'UniqueUsersOverTimeData';
3946
+ data: LineChartData;
3947
+ };
3909
3948
  export type UnsubscribeFromNotificationResult = {
3910
3949
  __typename?: 'UnsubscribeFromNotificationResult';
3911
3950
  notificationSubscription: NotificationSubscription;
@@ -3914,6 +3953,7 @@ export type Update = ActivityTimelineProjectActivity & {
3914
3953
  __typename?: 'Update';
3915
3954
  activityTimestamp: Scalars['DateTime'];
3916
3955
  actor?: Maybe<Actor>;
3956
+ app: App;
3917
3957
  awaitingCodeSigningInfo: Scalars['Boolean'];
3918
3958
  branch: UpdateBranch;
3919
3959
  branchId: Scalars['ID'];
@@ -170,6 +170,7 @@ var BuildStatus;
170
170
  BuildStatus["InProgress"] = "IN_PROGRESS";
171
171
  BuildStatus["InQueue"] = "IN_QUEUE";
172
172
  BuildStatus["New"] = "NEW";
173
+ BuildStatus["PendingCancel"] = "PENDING_CANCEL";
173
174
  })(BuildStatus = exports.BuildStatus || (exports.BuildStatus = {}));
174
175
  var BuildTrigger;
175
176
  (function (BuildTrigger) {
@@ -290,6 +291,7 @@ var MailchimpTag;
290
291
  var NotificationEvent;
291
292
  (function (NotificationEvent) {
292
293
  NotificationEvent["BuildComplete"] = "BUILD_COMPLETE";
294
+ NotificationEvent["BuildPlanCreditThresholdExceeded"] = "BUILD_PLAN_CREDIT_THRESHOLD_EXCEEDED";
293
295
  NotificationEvent["SubmissionComplete"] = "SUBMISSION_COMPLETE";
294
296
  })(NotificationEvent = exports.NotificationEvent || (exports.NotificationEvent = {}));
295
297
  var NotificationType;
@@ -1,8 +1,13 @@
1
1
  import { ExpoConfig } from '@expo/config';
2
2
  import { Env } from '@expo/eas-build-job';
3
+ export type PublicExpoConfig = Omit<ExpoConfig, '_internal' | 'hooks' | 'ios' | 'android' | 'updates'> & {
4
+ ios?: Omit<ExpoConfig['ios'], 'config'>;
5
+ android?: Omit<ExpoConfig['android'], 'config'>;
6
+ updates?: Omit<ExpoConfig['updates'], 'codeSigningCertificate' | 'codeSigningMetadata'>;
7
+ };
3
8
  export interface ExpoConfigOptions {
4
9
  env?: Env;
5
- isPublicConfig?: boolean;
6
10
  skipSDKVersionRequirement?: boolean;
7
11
  }
8
- export declare function getExpoConfig(projectDir: string, opts?: ExpoConfigOptions): ExpoConfig;
12
+ export declare function getPrivateExpoConfig(projectDir: string, opts?: ExpoConfigOptions): ExpoConfig;
13
+ export declare function getPublicExpoConfig(projectDir: string, opts?: ExpoConfigOptions): PublicExpoConfig;