eas-cli 19.0.1 → 19.0.4

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.
@@ -3,6 +3,7 @@ export default class SimulatorStart extends EasCommand {
3
3
  static hidden: boolean;
4
4
  static description: string;
5
5
  static flags: {
6
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
7
  'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
7
8
  platform: import("@oclif/core/lib/interfaces").OptionFlag<"android" | "ios", import("@oclif/core/lib/interfaces").CustomOptions>;
8
9
  type: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -11,6 +11,7 @@ const DeviceRunSessionQuery_1 = require("../../graphql/queries/DeviceRunSessionQ
11
11
  const log_1 = tslib_1.__importStar(require("../../log"));
12
12
  const ora_1 = require("../../ora");
13
13
  const utils_1 = require("../../simulator/utils");
14
+ const json_1 = require("../../utils/json");
14
15
  const promise_1 = require("../../utils/promise");
15
16
  const nullthrows_1 = tslib_1.__importDefault(require("nullthrows"));
16
17
  const POLL_INTERVAL_MS = 5_000; // 5 seconds
@@ -19,6 +20,7 @@ const POLL_TIMEOUT_MS = 15 * 60 * 1_000; // 15 minutes
19
20
  // so adding a new enum value in codegen fails the build until it is wired up here.
20
21
  const DEVICE_RUN_SESSION_TYPE_FLAG_VALUES = {
21
22
  [generated_1.DeviceRunSessionType.AgentDevice]: 'agent-device',
23
+ [generated_1.DeviceRunSessionType.Argent]: 'argent',
22
24
  [generated_1.DeviceRunSessionType.ServeSim]: 'serve-sim',
23
25
  };
24
26
  const DEVICE_RUN_SESSION_TYPE_BY_FLAG_VALUE = Object.fromEntries(Object.entries(DEVICE_RUN_SESSION_TYPE_FLAG_VALUES).map(([type, value]) => [value, type]));
@@ -39,7 +41,7 @@ class SimulatorStart extends EasCommand_1.default {
39
41
  'package-version': core_1.Flags.string({
40
42
  description: 'Version of the package backing the device run session (e.g. "0.1.3-alpha.3"). Defaults to "latest" when omitted.',
41
43
  }),
42
- ...flags_1.EASNonInteractiveFlag,
44
+ ...flags_1.EasNonInteractiveAndJsonFlags,
43
45
  };
44
46
  static contextDefinition = {
45
47
  ...this.ContextOptions.ProjectId,
@@ -47,8 +49,12 @@ class SimulatorStart extends EasCommand_1.default {
47
49
  };
48
50
  async runAsync() {
49
51
  const { flags } = await this.parse(SimulatorStart);
52
+ const { json: jsonFlag, nonInteractive } = (0, flags_1.resolveNonInteractiveAndJsonFlags)(flags);
53
+ if (jsonFlag) {
54
+ (0, json_1.enableJsonOutput)();
55
+ }
50
56
  const { projectId, loggedIn: { graphqlClient }, } = await this.getContextAsync(SimulatorStart, {
51
- nonInteractive: flags['non-interactive'],
57
+ nonInteractive,
52
58
  });
53
59
  const platform = flags.platform === 'android' ? generated_1.AppPlatform.Android : generated_1.AppPlatform.Ios;
54
60
  const createSpinner = (0, ora_1.ora)('🚀 Creating device run session').start();
@@ -104,10 +110,19 @@ class SimulatorStart extends EasCommand_1.default {
104
110
  await ensureDeviceRunSessionStoppedSafelyAsync(graphqlClient, deviceRunSessionId);
105
111
  throw new Error(`Timed out after ${Math.round(POLL_TIMEOUT_MS / 1000)}s waiting for ${flags.type} session to be ready. ${(0, log_1.link)(jobRunUrl)}`);
106
112
  }
113
+ if (jsonFlag) {
114
+ (0, json_1.printJsonOnlyOutput)({
115
+ id: deviceRunSessionId,
116
+ type: flags.type,
117
+ jobRunUrl,
118
+ remoteConfig,
119
+ });
120
+ return;
121
+ }
107
122
  log_1.default.newLine();
108
123
  log_1.default.log((0, utils_1.formatRemoteSessionInstructions)(remoteConfig));
109
124
  log_1.default.newLine();
110
- if (flags['non-interactive']) {
125
+ if (nonInteractive) {
111
126
  log_1.default.log(`When you are done, stop the session with: eas simulator:stop --id ${deviceRunSessionId}`);
112
127
  return;
113
128
  }
@@ -1854,6 +1854,15 @@ export type AppObserve = {
1854
1854
  navigationRoutes: AppObserveNavigationRoutesConnection;
1855
1855
  timeSeries: AppObserveTimeSeries;
1856
1856
  totalEventCount: Scalars['Int']['output'];
1857
+ /**
1858
+ * Approximate count of unique users (`eas_client_id`) with at least one
1859
+ * supported-metric event in `[startTime, endTime)`. Uses ClickHouse's
1860
+ * HyperLogLog `uniq()`, so the value can drift by a small percent on apps
1861
+ * with very large user bases. `metricNames` on the input is currently
1862
+ * ignored: the count is always over all supported metrics, matching the
1863
+ * universe used by `appVersions` headline counts.
1864
+ */
1865
+ uniqueActiveUserCount: Scalars['Int']['output'];
1857
1866
  updates: AppObserveUpdatesConnection;
1858
1867
  };
1859
1868
  export type AppObserveAppVersionsArgs = {
@@ -1905,6 +1914,9 @@ export type AppObserveNavigationRoutesArgs = {
1905
1914
  export type AppObserveTimeSeriesArgs = {
1906
1915
  input: AppObserveTimeSeriesInput;
1907
1916
  };
1917
+ export type AppObserveUniqueActiveUserCountArgs = {
1918
+ input: AppObserveReleasesInput;
1919
+ };
1908
1920
  export type AppObserveUpdatesArgs = {
1909
1921
  input: AppObserveUpdatesInput;
1910
1922
  };
@@ -1950,6 +1962,17 @@ export type AppObserveAppVersion = {
1950
1962
  buildNumbers: Array<AppObserveAppBuildNumber>;
1951
1963
  eventCount: Scalars['Int']['output'];
1952
1964
  firstSeenAt: Scalars['DateTime']['output'];
1965
+ /**
1966
+ * Unique users whose most recent supported-metric event in
1967
+ * `[startTime, endTime)` was on this version. Each active user
1968
+ * contributes to exactly one version, so summing this field across the
1969
+ * returned versions yields the total active users in the window (equal
1970
+ * to `AppObserve.uniqueActiveUserCount` up to HyperLogLog noise).
1971
+ * A version may be returned with `lastSeenUserCount = 0` when
1972
+ * every user who touched it later moved to a newer version. Users with
1973
+ * no events in the window are not counted on any version.
1974
+ */
1975
+ lastSeenUserCount: Scalars['Int']['output'];
1953
1976
  metrics: Array<AppObserveAppVersionMetric>;
1954
1977
  uniqueUserCount: Scalars['Int']['output'];
1955
1978
  updates: Array<AppObserveAppUpdate>;
@@ -2982,6 +3005,15 @@ export declare enum AppsFilter {
2982
3005
  /** New Projects */
2983
3006
  New = "NEW"
2984
3007
  }
3008
+ export type ArgentRunSessionRemoteConfig = {
3009
+ __typename?: 'ArgentRunSessionRemoteConfig';
3010
+ toolsUrl: Scalars['String']['output'];
3011
+ /**
3012
+ * URL of the web preview surface for the session. Null when web previews are
3013
+ * not available for the platform (e.g. Android).
3014
+ */
3015
+ webPreviewUrl?: Maybe<Scalars['String']['output']>;
3016
+ };
2985
3017
  export type AscApiKeyInput = {
2986
3018
  issuerIdentifier: Scalars['String']['input'];
2987
3019
  keyIdentifier: Scalars['String']['input'];
@@ -3588,6 +3620,7 @@ export declare enum BuildPhase {
3588
3620
  EasBuildInternal = "EAS_BUILD_INTERNAL",
3589
3621
  FailBuild = "FAIL_BUILD",
3590
3622
  FixGradlew = "FIX_GRADLEW",
3623
+ GradleBuildProfile = "GRADLE_BUILD_PROFILE",
3591
3624
  InstallCustomTools = "INSTALL_CUSTOM_TOOLS",
3592
3625
  InstallDependencies = "INSTALL_DEPENDENCIES",
3593
3626
  InstallPods = "INSTALL_PODS",
@@ -4471,7 +4504,7 @@ export type DeviceRunSessionQuery = {
4471
4504
  export type DeviceRunSessionQueryByIdArgs = {
4472
4505
  deviceRunSessionId: Scalars['ID']['input'];
4473
4506
  };
4474
- export type DeviceRunSessionRemoteConfig = AgentDeviceRunSessionRemoteConfig | ServeSimRunSessionRemoteConfig;
4507
+ export type DeviceRunSessionRemoteConfig = AgentDeviceRunSessionRemoteConfig | ArgentRunSessionRemoteConfig | ServeSimRunSessionRemoteConfig;
4475
4508
  export declare enum DeviceRunSessionStatus {
4476
4509
  Errored = "ERRORED",
4477
4510
  InProgress = "IN_PROGRESS",
@@ -4480,6 +4513,7 @@ export declare enum DeviceRunSessionStatus {
4480
4513
  }
4481
4514
  export declare enum DeviceRunSessionType {
4482
4515
  AgentDevice = "AGENT_DEVICE",
4516
+ Argent = "ARGENT",
4483
4517
  ServeSim = "SERVE_SIM"
4484
4518
  }
4485
4519
  export type DiscordUser = {
@@ -5107,6 +5141,25 @@ export type EditUpdateBranchInput = {
5107
5141
  name?: InputMaybe<Scalars['String']['input']>;
5108
5142
  newName: Scalars['String']['input'];
5109
5143
  };
5144
+ export type EmbeddedUpdate = {
5145
+ __typename?: 'EmbeddedUpdate';
5146
+ channel: Scalars['String']['output'];
5147
+ createdAt: Scalars['DateTime']['output'];
5148
+ /** The manifest UUID baked into the binary by expo-updates at build time. */
5149
+ id: Scalars['ID']['output'];
5150
+ launchAsset: EmbeddedUpdateAsset;
5151
+ platform: AppPlatform;
5152
+ runtimeVersion: Scalars['String']['output'];
5153
+ };
5154
+ export type EmbeddedUpdateAsset = {
5155
+ __typename?: 'EmbeddedUpdateAsset';
5156
+ contentType: Scalars['String']['output'];
5157
+ fileSHA256: Scalars['String']['output'];
5158
+ fileSize: Scalars['Int']['output'];
5159
+ finalFileSize?: Maybe<Scalars['Int']['output']>;
5160
+ id: Scalars['ID']['output'];
5161
+ storageKey: Scalars['String']['output'];
5162
+ };
5110
5163
  export type EmbeddedUpdateAssetMutation = {
5111
5164
  __typename?: 'EmbeddedUpdateAssetMutation';
5112
5165
  /**
@@ -5129,6 +5182,17 @@ export type EmbeddedUpdateAssetUploadSpec = {
5129
5182
  /** Storage key (`{appId}/{embeddedUpdateId}`). Same key in both upload and destination buckets. */
5130
5183
  storageKey: Scalars['String']['output'];
5131
5184
  };
5185
+ export type EmbeddedUpdateMutation = {
5186
+ __typename?: 'EmbeddedUpdateMutation';
5187
+ /**
5188
+ * Register an embedded bundle as the launch asset for a given app/platform/channel.
5189
+ * Returns EMBEDDED_UPDATE_ASSET_NOT_AVAILABLE if the asset has not been finalized yet.
5190
+ */
5191
+ uploadEmbeddedUpdate: EmbeddedUpdate;
5192
+ };
5193
+ export type EmbeddedUpdateMutationUploadEmbeddedUpdateArgs = {
5194
+ input: UploadEmbeddedUpdateInput;
5195
+ };
5132
5196
  export declare enum EntityTypeName {
5133
5197
  AccountEntity = "AccountEntity",
5134
5198
  AccountSsoConfigurationEntity = "AccountSSOConfigurationEntity",
@@ -6177,6 +6241,7 @@ export type JobRun = {
6177
6241
  createdAt: Scalars['DateTime']['output'];
6178
6242
  displayName?: Maybe<Scalars['String']['output']>;
6179
6243
  endedAt?: Maybe<Scalars['DateTime']['output']>;
6244
+ enqueuedAt?: Maybe<Scalars['DateTime']['output']>;
6180
6245
  errors: Array<JobRunError>;
6181
6246
  expiresAt: Scalars['DateTime']['output'];
6182
6247
  gitCommitHash?: Maybe<Scalars['String']['output']>;
@@ -6926,6 +6991,8 @@ export type RootMutation = {
6926
6991
  echoTurn: EchoTurnMutation;
6927
6992
  /** Mutations for Echo versions */
6928
6993
  echoVersion: EchoVersionMutation;
6994
+ /** Mutations that register embedded update bundles for bundle diffing. */
6995
+ embeddedUpdate: EmbeddedUpdateMutation;
6929
6996
  embeddedUpdateAsset: EmbeddedUpdateAssetMutation;
6930
6997
  /** Mutations that create and delete EnvironmentSecrets */
6931
6998
  environmentSecret: EnvironmentSecretMutation;
@@ -8243,6 +8310,15 @@ export type UpdatesMetricsData = {
8243
8310
  installsDataset: CumulativeUpdatesDataset;
8244
8311
  labels: Array<Scalars['String']['output']>;
8245
8312
  };
8313
+ export type UploadEmbeddedUpdateInput = {
8314
+ appId: Scalars['ID']['input'];
8315
+ channel: Scalars['String']['input'];
8316
+ /** UUID baked into the binary by expo-updates at build time (from app.manifest id field). */
8317
+ embeddedUpdateId: Scalars['ID']['input'];
8318
+ platform: AppPlatform;
8319
+ runtimeVersion: Scalars['String']['input'];
8320
+ turtleBuildId?: InputMaybe<Scalars['ID']['input']>;
8321
+ };
8246
8322
  export type UploadSession = {
8247
8323
  __typename?: 'UploadSession';
8248
8324
  /** Create an Upload Session for a specific account */
@@ -16866,6 +16942,10 @@ export type DeviceRunSessionByIdQuery = {
16866
16942
  agentDeviceRemoteSessionUrl: string;
16867
16943
  agentDeviceRemoteSessionToken: string;
16868
16944
  webPreviewUrl?: string | null;
16945
+ } | {
16946
+ __typename: 'ArgentRunSessionRemoteConfig';
16947
+ toolsUrl: string;
16948
+ webPreviewUrl?: string | null;
16869
16949
  } | {
16870
16950
  __typename: 'ServeSimRunSessionRemoteConfig';
16871
16951
  previewUrl: string;
@@ -279,6 +279,7 @@ var BuildPhase;
279
279
  BuildPhase["EasBuildInternal"] = "EAS_BUILD_INTERNAL";
280
280
  BuildPhase["FailBuild"] = "FAIL_BUILD";
281
281
  BuildPhase["FixGradlew"] = "FIX_GRADLEW";
282
+ BuildPhase["GradleBuildProfile"] = "GRADLE_BUILD_PROFILE";
282
283
  BuildPhase["InstallCustomTools"] = "INSTALL_CUSTOM_TOOLS";
283
284
  BuildPhase["InstallDependencies"] = "INSTALL_DEPENDENCIES";
284
285
  BuildPhase["InstallPods"] = "INSTALL_PODS";
@@ -414,6 +415,7 @@ var DeviceRunSessionStatus;
414
415
  var DeviceRunSessionType;
415
416
  (function (DeviceRunSessionType) {
416
417
  DeviceRunSessionType["AgentDevice"] = "AGENT_DEVICE";
418
+ DeviceRunSessionType["Argent"] = "ARGENT";
417
419
  DeviceRunSessionType["ServeSim"] = "SERVE_SIM";
418
420
  })(DeviceRunSessionType || (exports.DeviceRunSessionType = DeviceRunSessionType = {}));
419
421
  var DistributionType;
@@ -29,6 +29,10 @@ exports.DeviceRunSessionQuery = {
29
29
  agentDeviceRemoteSessionToken
30
30
  webPreviewUrl
31
31
  }
32
+ ... on ArgentRunSessionRemoteConfig {
33
+ toolsUrl
34
+ webPreviewUrl
35
+ }
32
36
  ... on ServeSimRunSessionRemoteConfig {
33
37
  previewUrl
34
38
  streamUrl
@@ -6,6 +6,7 @@ const tslib_1 = require("tslib");
6
6
  const config_plugins_1 = require("@expo/config-plugins");
7
7
  const prebuild_config_1 = require("@expo/prebuild-config");
8
8
  const log_1 = tslib_1.__importDefault(require("../../log"));
9
+ const sentry_1 = tslib_1.__importDefault(require("../../sentry"));
9
10
  const expoCli_1 = require("../../utils/expoCli");
10
11
  const plist_1 = require("../../utils/plist");
11
12
  const projectUtils_1 = require("../projectUtils");
@@ -24,6 +25,24 @@ async function getManagedApplicationTargetEntitlementsAsync(projectDir, env, vcs
24
25
  return expWithMods.ios?.entitlements ?? {};
25
26
  }
26
27
  catch (error) {
28
+ try {
29
+ sentry_1.default.withScope(scope => {
30
+ if (process.env.EAS_BUILD_PROJECT_ID) {
31
+ scope.setTag('app_id', process.env.EAS_BUILD_PROJECT_ID);
32
+ }
33
+ if (process.env.EAS_BUILD_ID) {
34
+ scope.setTag('build_id', process.env.EAS_BUILD_ID);
35
+ }
36
+ scope.setTag('config_resolution', 'ios_entitlements_introspection');
37
+ scope.setExtra('message', 'iOS entitlements config fallback');
38
+ scope.setExtra('stdout', error.stdout);
39
+ scope.setExtra('stderr', error.stderr);
40
+ sentry_1.default.captureException(error);
41
+ });
42
+ }
43
+ catch {
44
+ // do nothing
45
+ }
27
46
  expoConfigError = error;
28
47
  log_1.default.warn(`Failed to read the app config from the project using the local Expo CLI: ${formatError(error)}`);
29
48
  log_1.default.warn('Falling back to the version of "@expo/config" shipped with the EAS CLI.');
@@ -15,6 +15,17 @@ function formatRemoteSessionInstructions(remoteConfig) {
15
15
  }
16
16
  return lines.join('\n');
17
17
  }
18
+ case 'ArgentRunSessionRemoteConfig': {
19
+ const lines = [
20
+ '🔑 Open the following URL to access the Argent tools for this session:',
21
+ '',
22
+ remoteConfig.toolsUrl,
23
+ ];
24
+ if (remoteConfig.webPreviewUrl) {
25
+ lines.push('', '🌐 Open the following URL in your browser to preview the simulator:', '', remoteConfig.webPreviewUrl);
26
+ }
27
+ return lines.join('\n');
28
+ }
18
29
  case 'ServeSimRunSessionRemoteConfig':
19
30
  return [
20
31
  '🌐 Open the following URL in your browser to access the simulator:',