eas-cli 18.11.0 → 18.12.0

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.
@@ -12,6 +12,7 @@ export default class IntegrationsConvexConnect extends EasCommand {
12
12
  'non-interactive': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
13
  };
14
14
  runAsync(): Promise<void>;
15
+ private upsertConvexUrlEasEnvVarAsync;
15
16
  private resolveRegionAsync;
16
17
  private resolveTeamNameAsync;
17
18
  private resolveProjectNameAsync;
@@ -7,11 +7,15 @@ const chalk_1 = tslib_1.__importDefault(require("chalk"));
7
7
  const dotenv_1 = tslib_1.__importDefault(require("dotenv"));
8
8
  const fs = tslib_1.__importStar(require("fs-extra"));
9
9
  const path_1 = tslib_1.__importDefault(require("path"));
10
+ const environment_1 = require("../../../build/utils/environment");
10
11
  const EasCommand_1 = tslib_1.__importDefault(require("../../../commandUtils/EasCommand"));
11
12
  const convex_1 = require("../../../commandUtils/convex");
12
13
  const flags_1 = require("../../../commandUtils/flags");
14
+ const generated_1 = require("../../../graphql/generated");
13
15
  const ConvexMutation_1 = require("../../../graphql/mutations/ConvexMutation");
16
+ const EnvironmentVariableMutation_1 = require("../../../graphql/mutations/EnvironmentVariableMutation");
14
17
  const ConvexQuery_1 = require("../../../graphql/queries/ConvexQuery");
18
+ const EnvironmentVariablesQuery_1 = require("../../../graphql/queries/EnvironmentVariablesQuery");
15
19
  const log_1 = tslib_1.__importDefault(require("../../../log"));
16
20
  const ora_1 = require("../../../ora");
17
21
  const projectUtils_1 = require("../../../project/projectUtils");
@@ -21,6 +25,12 @@ const CONVEX_REGIONS = [
21
25
  { title: 'EU West (aws-eu-west-1)', value: 'aws-eu-west-1' },
22
26
  ];
23
27
  const DEFAULT_REGION = 'aws-us-east-1';
28
+ const EAS_CONVEX_ENV_VAR_NAME = 'EXPO_PUBLIC_CONVEX_URL';
29
+ const EAS_CONVEX_ENVIRONMENTS = [
30
+ environment_1.DefaultEnvironment.Production,
31
+ environment_1.DefaultEnvironment.Preview,
32
+ environment_1.DefaultEnvironment.Development,
33
+ ];
24
34
  class IntegrationsConvexConnect extends EasCommand_1.default {
25
35
  static description = 'connect Convex to your Expo project';
26
36
  static contextDefinition = {
@@ -99,23 +109,63 @@ class IntegrationsConvexConnect extends EasCommand_1.default {
99
109
  spinner.fail('Failed to set up Convex project');
100
110
  throw error;
101
111
  }
102
- // 6. Send team invite (non-fatal)
112
+ // 6. Save the Convex URL as an EAS environment variable for builds
113
+ await this.upsertConvexUrlEasEnvVarAsync(graphqlClient, projectId, setupResult.convexDeploymentUrl, nonInteractive);
114
+ // 7. Send team invite (non-fatal)
103
115
  const teamInviteResult = await this.sendTeamInviteAsync(graphqlClient, connection, actor, {
104
116
  nonInteractive,
105
117
  });
106
- // 7. Write deploy key and URL to .env.local
118
+ // 8. Write deploy key and URL to .env.local
107
119
  await this.writeEnvLocalAsync(projectDir, setupResult.deployKey, setupResult.convexDeploymentUrl, nonInteractive);
108
- // 8. Success message
120
+ // 9. Success message
109
121
  log_1.default.addNewLineIfNone();
110
122
  log_1.default.log(chalk_1.default.green('Convex is ready!'));
111
123
  log_1.default.newLine();
112
124
  log_1.default.log('Next steps:');
113
125
  log_1.default.log(` 1. Start the Convex dev server: ${chalk_1.default.cyan('npx convex dev')}`);
126
+ log_1.default.log(` 2. Learn how to connect to your new Convex database by following our quickstart guide: ${chalk_1.default.cyan('https://docs.expo.dev/guides/using-convex')}`);
127
+ log_1.default.log(` 3. Read more about Convex: ${chalk_1.default.cyan('https://docs.convex.dev/')}`);
114
128
  log_1.default.newLine();
115
129
  if (teamInviteResult === 'sent') {
116
130
  log_1.default.log(`Check your email for an invitation to join your Convex team. Accept it for full dashboard access.`);
117
131
  }
118
132
  }
133
+ async upsertConvexUrlEasEnvVarAsync(graphqlClient, projectId, convexUrl, nonInteractive) {
134
+ const existingVariables = await EnvironmentVariablesQuery_1.EnvironmentVariablesQuery.byAppIdAsync(graphqlClient, {
135
+ appId: projectId,
136
+ filterNames: [EAS_CONVEX_ENV_VAR_NAME],
137
+ });
138
+ const existingProjectVariable = existingVariables.find(variable => variable.scope === generated_1.EnvironmentVariableScope.Project);
139
+ if (existingProjectVariable) {
140
+ if (!nonInteractive) {
141
+ const overwrite = await (0, prompts_1.confirmAsync)({
142
+ message: `EAS already has an ${EAS_CONVEX_ENV_VAR_NAME} environment variable for this project. Overwrite it?`,
143
+ });
144
+ if (!overwrite) {
145
+ log_1.default.warn(`Skipped updating EAS environment variable ${chalk_1.default.bold(EAS_CONVEX_ENV_VAR_NAME)}.`);
146
+ return;
147
+ }
148
+ }
149
+ await EnvironmentVariableMutation_1.EnvironmentVariableMutation.updateAsync(graphqlClient, {
150
+ id: existingProjectVariable.id,
151
+ name: EAS_CONVEX_ENV_VAR_NAME,
152
+ value: convexUrl,
153
+ environments: EAS_CONVEX_ENVIRONMENTS,
154
+ visibility: generated_1.EnvironmentVariableVisibility.Public,
155
+ type: generated_1.EnvironmentSecretType.String,
156
+ });
157
+ log_1.default.withTick(`Updated EAS environment variable ${chalk_1.default.bold(EAS_CONVEX_ENV_VAR_NAME)} for builds`);
158
+ return;
159
+ }
160
+ await EnvironmentVariableMutation_1.EnvironmentVariableMutation.createForAppAsync(graphqlClient, {
161
+ name: EAS_CONVEX_ENV_VAR_NAME,
162
+ value: convexUrl,
163
+ environments: EAS_CONVEX_ENVIRONMENTS,
164
+ visibility: generated_1.EnvironmentVariableVisibility.Public,
165
+ type: generated_1.EnvironmentSecretType.String,
166
+ }, projectId);
167
+ log_1.default.withTick(`Created EAS environment variable ${chalk_1.default.bold(EAS_CONVEX_ENV_VAR_NAME)} for builds`);
168
+ }
119
169
  async resolveRegionAsync(flagValue, nonInteractive) {
120
170
  if (flagValue) {
121
171
  return flagValue;
@@ -68,10 +68,9 @@ class SimulatorStart extends EasCommand_1.default {
68
68
  createSpinner.fail('Failed to create device run session');
69
69
  throw err;
70
70
  }
71
- const checkReadiness = getReadinessCheckerForType(flags.type);
72
71
  const pollSpinner = (0, ora_1.ora)(`⏳ Waiting for ${flags.type} daemon to start`).start();
73
72
  const deadline = Date.now() + POLL_TIMEOUT_MS;
74
- let result = { ready: false };
73
+ let remoteConfig;
75
74
  try {
76
75
  while (Date.now() < deadline) {
77
76
  const session = await DeviceRunSessionQuery_1.DeviceRunSessionQuery.byIdAsync(graphqlClient, deviceRunSessionId);
@@ -85,9 +84,8 @@ class SimulatorStart extends EasCommand_1.default {
85
84
  jobRunStatus === generated_1.JobRunStatus.Finished) {
86
85
  throw new Error(`Turtle job run for device run session ${deviceRunSessionId} ${jobRunStatus.toLowerCase()} before the ${flags.type} daemon was ready. ${(0, log_1.link)(jobRunUrl)}`);
87
86
  }
88
- const logMessages = await fetchLogMessagesAsync(session.turtleJobRun?.logFileUrls ?? []);
89
- result = checkReadiness(logMessages);
90
- if (result.ready) {
87
+ if (session.remoteConfig) {
88
+ remoteConfig = session.remoteConfig;
91
89
  pollSpinner.succeed(`🎉 ${flags.type} daemon is ready`);
92
90
  break;
93
91
  }
@@ -95,11 +93,11 @@ class SimulatorStart extends EasCommand_1.default {
95
93
  }
96
94
  }
97
95
  catch (err) {
98
- pollSpinner.fail(`Failed while polling for ${flags.type} daemon logs`);
96
+ pollSpinner.fail(`Failed while polling for ${flags.type} daemon to start`);
99
97
  await ensureDeviceRunSessionStoppedSafelyAsync(graphqlClient, deviceRunSessionId);
100
98
  throw err;
101
99
  }
102
- if (!result.ready) {
100
+ if (!remoteConfig) {
103
101
  pollSpinner.fail(`Timed out waiting for ${flags.type} daemon to start`);
104
102
  await ensureDeviceRunSessionStoppedSafelyAsync(graphqlClient, deviceRunSessionId);
105
103
  throw new Error(`Timed out after ${Math.round(POLL_TIMEOUT_MS / 1000)}s waiting for ${flags.type} daemon to start. ${(0, log_1.link)(jobRunUrl)}`);
@@ -107,7 +105,7 @@ class SimulatorStart extends EasCommand_1.default {
107
105
  log_1.default.newLine();
108
106
  log_1.default.log(`🔑 Run the following in your shell to attach to ${flags.type}:`);
109
107
  log_1.default.newLine();
110
- log_1.default.log(result.message);
108
+ log_1.default.log(formatRemoteConfigShellSnippet(remoteConfig));
111
109
  log_1.default.newLine();
112
110
  if (flags['non-interactive']) {
113
111
  log_1.default.log(`When you are done, stop the session with: eas simulator:stop --id ${deviceRunSessionId}`);
@@ -189,96 +187,12 @@ async function ensureDeviceRunSessionStoppedSafelyAsync(graphqlClient, deviceRun
189
187
  return false;
190
188
  }
191
189
  }
192
- function getReadinessCheckerForType(type) {
193
- switch (type) {
194
- case DEVICE_RUN_SESSION_TYPE_FLAG_VALUES[generated_1.DeviceRunSessionType.AgentDevice]:
195
- return checkAgentDeviceReadiness;
196
- default:
197
- throw new Error(`Unsupported device run session type: ${type}`);
190
+ function formatRemoteConfigShellSnippet(remoteConfig) {
191
+ switch (remoteConfig.__typename) {
192
+ case 'AgentDeviceRunSessionRemoteConfig':
193
+ return [
194
+ `export AGENT_DEVICE_DAEMON_BASE_URL='${remoteConfig.url}'`,
195
+ `export AGENT_DEVICE_DAEMON_AUTH_TOKEN='${remoteConfig.token}'`,
196
+ ].join('\n');
198
197
  }
199
198
  }
200
- const AGENT_DEVICE_BASE_URL_ENV_VAR = 'AGENT_DEVICE_DAEMON_BASE_URL';
201
- const AGENT_DEVICE_AUTH_TOKEN_ENV_VAR = 'AGENT_DEVICE_DAEMON_AUTH_TOKEN';
202
- function checkAgentDeviceReadiness(logMessages) {
203
- let baseUrl;
204
- let authToken;
205
- for (const msg of logMessages) {
206
- baseUrl = baseUrl ?? extractExportedEnvValue(msg, AGENT_DEVICE_BASE_URL_ENV_VAR);
207
- authToken = authToken ?? extractExportedEnvValue(msg, AGENT_DEVICE_AUTH_TOKEN_ENV_VAR);
208
- if (baseUrl && authToken) {
209
- break;
210
- }
211
- }
212
- if (baseUrl && authToken) {
213
- return {
214
- ready: true,
215
- message: [
216
- `export ${AGENT_DEVICE_BASE_URL_ENV_VAR}='${baseUrl}'`,
217
- `export ${AGENT_DEVICE_AUTH_TOKEN_ENV_VAR}='${authToken}'`,
218
- ].join('\n'),
219
- };
220
- }
221
- return { ready: false };
222
- }
223
- async function fetchLogMessagesAsync(logUrls) {
224
- const messages = [];
225
- for (const url of logUrls) {
226
- const text = await fetchLogTextAsync(url);
227
- if (!text) {
228
- continue;
229
- }
230
- for (const line of text.split('\n')) {
231
- if (!line.trim()) {
232
- continue;
233
- }
234
- messages.push(extractLogMessage(line));
235
- }
236
- }
237
- return messages;
238
- }
239
- async function fetchLogTextAsync(url) {
240
- try {
241
- const response = await fetch(url);
242
- if (!response.ok) {
243
- return undefined;
244
- }
245
- return await response.text();
246
- }
247
- catch {
248
- return undefined;
249
- }
250
- }
251
- function extractLogMessage(line) {
252
- // Turtle job run logs are JSONL (bunyan-shaped), e.g.
253
- // {"msg":"export FOO=\"bar\"","time":"...","logId":"..."}
254
- // Fall back to the raw line if it's not JSON or doesn't have a string msg.
255
- const trimmed = line.trim();
256
- if (!trimmed.startsWith('{')) {
257
- return line;
258
- }
259
- try {
260
- const parsed = JSON.parse(trimmed);
261
- if (parsed && typeof parsed === 'object' && 'msg' in parsed) {
262
- const msg = parsed.msg;
263
- if (typeof msg === 'string') {
264
- return msg;
265
- }
266
- }
267
- }
268
- catch {
269
- // not JSON, fall through
270
- }
271
- return line;
272
- }
273
- function extractExportedEnvValue(text, varName) {
274
- // Matches: export NAME=value | export NAME="value" | export NAME='value'
275
- const pattern = new RegExp(`export\\s+${escapeRegExp(varName)}=(?:"([^"]*)"|'([^']*)'|(\\S+))`);
276
- const match = pattern.exec(text);
277
- if (!match) {
278
- return undefined;
279
- }
280
- return match[1] ?? match[2] ?? match[3];
281
- }
282
- function escapeRegExp(value) {
283
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
284
- }
@@ -215,8 +215,13 @@ export type Account = {
215
215
  /** @deprecated Legacy access tokens are deprecated */
216
216
  requiresAccessTokenForPushSecurity: Scalars['Boolean']['output'];
217
217
  sentryInstallation?: Maybe<SentryInstallation>;
218
- /** Snacks associated with this account */
218
+ /**
219
+ * Snacks associated with this account
220
+ * @deprecated Use snacksPaginated
221
+ */
219
222
  snacks: Array<Snack>;
223
+ /** Paginated list of Snacks associated with this account, sorted by most recent activity. */
224
+ snacksPaginated: AccountSnacksConnection;
220
225
  /** Allowed SSO providers for this account */
221
226
  ssoAllowedAuthProviders: Array<AuthProviderIdentifier>;
222
227
  /** SSO configuration for this account */
@@ -462,6 +467,16 @@ export type AccountSnacksArgs = {
462
467
  limit: Scalars['Int']['input'];
463
468
  offset: Scalars['Int']['input'];
464
469
  };
470
+ /**
471
+ * An account is a container owning projects, credentials, billing and other organization
472
+ * data and settings. Actors may own and be members of accounts.
473
+ */
474
+ export type AccountSnacksPaginatedArgs = {
475
+ after?: InputMaybe<Scalars['String']['input']>;
476
+ before?: InputMaybe<Scalars['String']['input']>;
477
+ first?: InputMaybe<Scalars['Int']['input']>;
478
+ last?: InputMaybe<Scalars['Int']['input']>;
479
+ };
465
480
  /**
466
481
  * An account is a container owning projects, credentials, billing and other organization
467
482
  * data and settings. Actors may own and be members of accounts.
@@ -804,6 +819,16 @@ export type AccountSsoConfigurationPublicDataQuery = {
804
819
  export type AccountSsoConfigurationPublicDataQueryPublicDataByAccountNameArgs = {
805
820
  accountName: Scalars['String']['input'];
806
821
  };
822
+ export type AccountSnacksConnection = {
823
+ __typename?: 'AccountSnacksConnection';
824
+ edges: Array<AccountSnacksEdge>;
825
+ pageInfo: PageInfo;
826
+ };
827
+ export type AccountSnacksEdge = {
828
+ __typename?: 'AccountSnacksEdge';
829
+ cursor: Scalars['String']['output'];
830
+ node: Snack;
831
+ };
807
832
  export declare enum AccountUploadSessionType {
808
833
  ProfileImageUpload = "PROFILE_IMAGE_UPLOAD",
809
834
  WorkflowsProjectSources = "WORKFLOWS_PROJECT_SOURCES"
@@ -923,6 +948,11 @@ export type Address = {
923
948
  state?: Maybe<Scalars['String']['output']>;
924
949
  zip?: Maybe<Scalars['String']['output']>;
925
950
  };
951
+ export type AgentDeviceRunSessionRemoteConfig = {
952
+ __typename?: 'AgentDeviceRunSessionRemoteConfig';
953
+ token: Scalars['String']['output'];
954
+ url: Scalars['String']['output'];
955
+ };
926
956
  export type AndroidAppBuildCredentials = {
927
957
  __typename?: 'AndroidAppBuildCredentials';
928
958
  androidKeystore?: Maybe<AndroidKeystore>;
@@ -1824,8 +1854,13 @@ export type AppObserveCustomEventListArgs = {
1824
1854
  last?: InputMaybe<Scalars['Int']['input']>;
1825
1855
  };
1826
1856
  export type AppObserveCustomEventNamesArgs = {
1857
+ appBuildNumber?: InputMaybe<Scalars['String']['input']>;
1858
+ appEasBuildId?: InputMaybe<Scalars['String']['input']>;
1859
+ appUpdateId?: InputMaybe<Scalars['String']['input']>;
1860
+ appVersion?: InputMaybe<Scalars['String']['input']>;
1827
1861
  endTime: Scalars['DateTime']['input'];
1828
1862
  environment?: InputMaybe<Scalars['String']['input']>;
1863
+ orderBy?: InputMaybe<AppObserveCustomEventNamesOrderBy>;
1829
1864
  platform?: InputMaybe<AppObservePlatform>;
1830
1865
  startTime: Scalars['DateTime']['input'];
1831
1866
  };
@@ -1963,6 +1998,18 @@ export type AppObserveCustomEventNames = {
1963
1998
  isTruncated: Scalars['Boolean']['output'];
1964
1999
  names: Array<AppObserveCustomEventName>;
1965
2000
  };
2001
+ export type AppObserveCustomEventNamesOrderBy = {
2002
+ direction: AppObserveCustomEventNamesOrderByDirection;
2003
+ field: AppObserveCustomEventNamesOrderByField;
2004
+ };
2005
+ export declare enum AppObserveCustomEventNamesOrderByDirection {
2006
+ Asc = "ASC",
2007
+ Desc = "DESC"
2008
+ }
2009
+ export declare enum AppObserveCustomEventNamesOrderByField {
2010
+ Count = "COUNT",
2011
+ EventName = "EVENT_NAME"
2012
+ }
1966
2013
  export type AppObserveCustomEventPropertyFilter = {
1967
2014
  key: Scalars['String']['input'];
1968
2015
  value: Scalars['String']['input'];
@@ -2124,6 +2171,9 @@ export type AppObserveUpdatesConnection = {
2124
2171
  };
2125
2172
  export type AppObserveUpdatesInput = {
2126
2173
  after?: InputMaybe<Scalars['String']['input']>;
2174
+ appBuildNumber?: InputMaybe<Scalars['String']['input']>;
2175
+ appUpdateId?: InputMaybe<Scalars['String']['input']>;
2176
+ appVersion?: InputMaybe<Scalars['String']['input']>;
2127
2177
  endTime: Scalars['DateTime']['input'];
2128
2178
  environment?: InputMaybe<Scalars['String']['input']>;
2129
2179
  first?: InputMaybe<Scalars['Int']['input']>;
@@ -4270,6 +4320,7 @@ export type DeviceRunSession = {
4270
4320
  */
4271
4321
  packageVersion?: Maybe<Scalars['String']['output']>;
4272
4322
  platform: AppPlatform;
4323
+ remoteConfig?: Maybe<DeviceRunSessionRemoteConfig>;
4273
4324
  startedAt?: Maybe<Scalars['DateTime']['output']>;
4274
4325
  status: DeviceRunSessionStatus;
4275
4326
  turtleJobRun?: Maybe<JobRun>;
@@ -4286,6 +4337,8 @@ export type DeviceRunSessionMutation = {
4286
4337
  * ERRORED).
4287
4338
  */
4288
4339
  ensureDeviceRunSessionStopped: DeviceRunSession;
4340
+ /** Mark a device run session as started and persist remote connection details */
4341
+ startDeviceRunSession: DeviceRunSession;
4289
4342
  };
4290
4343
  export type DeviceRunSessionMutationCreateDeviceRunSessionArgs = {
4291
4344
  deviceRunSessionInput: CreateDeviceRunSessionInput;
@@ -4293,6 +4346,10 @@ export type DeviceRunSessionMutationCreateDeviceRunSessionArgs = {
4293
4346
  export type DeviceRunSessionMutationEnsureDeviceRunSessionStoppedArgs = {
4294
4347
  deviceRunSessionId: Scalars['ID']['input'];
4295
4348
  };
4349
+ export type DeviceRunSessionMutationStartDeviceRunSessionArgs = {
4350
+ deviceRunSessionId: Scalars['ID']['input'];
4351
+ remoteConfig: Scalars['JSONObject']['input'];
4352
+ };
4296
4353
  export type DeviceRunSessionQuery = {
4297
4354
  __typename?: 'DeviceRunSessionQuery';
4298
4355
  byId: DeviceRunSession;
@@ -4300,6 +4357,7 @@ export type DeviceRunSessionQuery = {
4300
4357
  export type DeviceRunSessionQueryByIdArgs = {
4301
4358
  deviceRunSessionId: Scalars['ID']['input'];
4302
4359
  };
4360
+ export type DeviceRunSessionRemoteConfig = AgentDeviceRunSessionRemoteConfig;
4303
4361
  export declare enum DeviceRunSessionStatus {
4304
4362
  Errored = "ERRORED",
4305
4363
  InProgress = "IN_PROGRESS",
@@ -4792,11 +4850,15 @@ export type EchoRepositoryResult = {
4792
4850
  export type EchoTurn = {
4793
4851
  __typename?: 'EchoTurn';
4794
4852
  completedAt?: Maybe<Scalars['DateTime']['output']>;
4853
+ /** Terminal status of the turn (null if still in progress) */
4854
+ completionStatus?: Maybe<EchoTurnCompletionStatus>;
4795
4855
  createdAt: Scalars['DateTime']['output'];
4796
4856
  /** Parent chat */
4797
4857
  echoChat: EchoChat;
4798
4858
  /** Messages in this turn */
4799
4859
  echoMessages: Array<EchoMessage>;
4860
+ /** Error message when completionStatus is ERROR */
4861
+ error?: Maybe<Scalars['String']['output']>;
4800
4862
  id: Scalars['ID']['output'];
4801
4863
  };
4802
4864
  /** Breakdown of cache write input tokens by cache TTL. */
@@ -4805,12 +4867,25 @@ export type EchoTurnCacheWriteInput = {
4805
4867
  ttl5m?: InputMaybe<Scalars['Int']['input']>;
4806
4868
  ttl24h?: InputMaybe<Scalars['Int']['input']>;
4807
4869
  };
4870
+ export declare enum EchoTurnCompletionStatus {
4871
+ Cancelled = "CANCELLED",
4872
+ Completed = "COMPLETED",
4873
+ Error = "ERROR"
4874
+ }
4808
4875
  export type EchoTurnMutation = {
4809
4876
  __typename?: 'EchoTurnMutation';
4810
- /** Mark a turn as completed and create a billing ledger entry */
4877
+ /**
4878
+ * Mark a turn as completed and create a billing ledger entry.
4879
+ *
4880
+ * completionStatus defaults to COMPLETED for backward compatibility with
4881
+ * clients that do not yet send a status. error may be set when
4882
+ * completionStatus is ERROR to record the failure reason.
4883
+ */
4811
4884
  completeTurn: EchoTurn;
4812
4885
  };
4813
4886
  export type EchoTurnMutationCompleteTurnArgs = {
4887
+ completionStatus?: InputMaybe<EchoTurnCompletionStatus>;
4888
+ error?: InputMaybe<Scalars['String']['input']>;
4814
4889
  id: Scalars['ID']['input'];
4815
4890
  usage: EchoTurnUsageInput;
4816
4891
  };
@@ -5151,6 +5226,30 @@ export type ExperimentationQuery = {
5151
5226
  /** Get user experimentation config */
5152
5227
  userConfig: Scalars['JSONObject']['output'];
5153
5228
  };
5229
+ export type ExpoGoBuildQuery = {
5230
+ __typename?: 'ExpoGoBuildQuery';
5231
+ repackConfiguration: ExpoGoProjectConfiguration;
5232
+ };
5233
+ export type ExpoGoBuildQueryRepackConfigurationArgs = {
5234
+ input: ExpoGoRepackInput;
5235
+ };
5236
+ export type ExpoGoProjectConfiguration = {
5237
+ __typename?: 'ExpoGoProjectConfiguration';
5238
+ files: Array<ExpoGoProjectFile>;
5239
+ sdkVersion: Scalars['String']['output'];
5240
+ };
5241
+ export type ExpoGoProjectFile = {
5242
+ __typename?: 'ExpoGoProjectFile';
5243
+ fileContents: Scalars['String']['output'];
5244
+ fileName: Scalars['String']['output'];
5245
+ };
5246
+ export type ExpoGoRepackInput = {
5247
+ appId: Scalars['ID']['input'];
5248
+ appName?: InputMaybe<Scalars['String']['input']>;
5249
+ ascAppId: Scalars['String']['input'];
5250
+ bundleId: Scalars['String']['input'];
5251
+ sdkVersion?: InputMaybe<Scalars['String']['input']>;
5252
+ };
5154
5253
  export type FcmSnippet = FcmSnippetLegacy | FcmSnippetV1;
5155
5254
  export type FcmSnippetLegacy = {
5156
5255
  __typename?: 'FcmSnippetLegacy';
@@ -6669,7 +6768,7 @@ export type RootMutation = {
6669
6768
  deployments: DeploymentsMutation;
6670
6769
  /** Mutations that assign or modify DevDomainNames for apps */
6671
6770
  devDomainName: AppDevDomainNameMutation;
6672
- /** Mutations that create and stop device run sessions */
6771
+ /** Mutations that create, start, and stop device run sessions */
6673
6772
  deviceRunSession: DeviceRunSessionMutation;
6674
6773
  /** Mutations for Discord users */
6675
6774
  discordUser: DiscordUserMutation;
@@ -6837,6 +6936,7 @@ export type RootQuery = {
6837
6936
  echoVersion: EchoVersionQuery;
6838
6937
  /** Top-level query object for querying Experimentation configuration. */
6839
6938
  experimentation: ExperimentationQuery;
6939
+ expoGoBuild: ExpoGoBuildQuery;
6840
6940
  /** Top-level query object for querying GitHub App information and resources it has access to. */
6841
6941
  githubApp: GitHubAppQuery;
6842
6942
  /** Top-level query object for querying Google Service Account Keys. */
@@ -9491,6 +9591,7 @@ export type WorkflowRunMutationCancelWorkflowRunArgs = {
9491
9591
  export type WorkflowRunMutationCreateExpoGoRepackWorkflowRunArgs = {
9492
9592
  appId: Scalars['ID']['input'];
9493
9593
  projectSource: WorkflowProjectSourceInput;
9594
+ sdkVersion?: InputMaybe<Scalars['String']['input']>;
9494
9595
  };
9495
9596
  export type WorkflowRunMutationCreateWorkflowRunArgs = {
9496
9597
  appId: Scalars['ID']['input'];
@@ -16555,11 +16656,16 @@ export type DeviceRunSessionByIdQuery = {
16555
16656
  __typename?: 'DeviceRunSession';
16556
16657
  id: string;
16557
16658
  status: DeviceRunSessionStatus;
16659
+ type: DeviceRunSessionType;
16660
+ remoteConfig?: {
16661
+ __typename: 'AgentDeviceRunSessionRemoteConfig';
16662
+ url: string;
16663
+ token: string;
16664
+ } | null;
16558
16665
  turtleJobRun?: {
16559
16666
  __typename?: 'JobRun';
16560
16667
  id: string;
16561
16668
  status: JobRunStatus;
16562
- logFileUrls: Array<string>;
16563
16669
  } | null;
16564
16670
  };
16565
16671
  };
@@ -6,9 +6,9 @@
6
6
  * For more info and docs, visit https://graphql-code-generator.com/
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.DistributionType = exports.DeviceRunSessionType = exports.DeviceRunSessionStatus = exports.DashboardViewPin = exports.CustomDomainStatus = exports.CustomDomainDnsRecordType = exports.CrashSampleFor = exports.ContinentCode = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildRetryDisabledReason = exports.BuildResourceClass = exports.BuildPriority = exports.BuildPhase = exports.BuildMode = exports.BuildLimitThresholdExceededMetadataType = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.BuildAnnotationType = exports.BackgroundJobState = exports.BackgroundJobResultType = exports.AuthProviderIdentifier = exports.AuthProtocolType = exports.AuditLogsExportFormat = exports.AssetMetadataStatus = exports.AssetMapSourceType = exports.AppsFilter = exports.AppleTeamType = exports.AppleDeviceClass = exports.AppUploadSessionType = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppProfileImageWidth = exports.AppPrivacy = exports.AppPlatform = exports.AppObserveUpdatesOrderByField = exports.AppObserveUpdatesOrderByDirection = exports.AppObservePropertyType = exports.AppObservePlatform = exports.AppObserveEventsOrderByField = exports.AppObserveEventsOrderByDirection = exports.AppInternalDistributionBuildPrivacy = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = exports.AccountUploadSessionType = exports.AccountMemberType = exports.AccountAppsSortByField = void 0;
10
- exports.ProjectArchiveSourceType = exports.Permission = exports.Order = exports.OnboardingEnvironment = exports.OnboardingDeviceType = exports.OfferType = exports.OAuthProvider = exports.NotificationType = exports.NotificationEvent = exports.LocalBuildArchiveSourceType = exports.JobRunStatus = exports.JobRunPriority = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.InsightsFilterType = exports.GitHubJobRunTriggerType = exports.GitHubJobRunTriggerRunStatus = exports.GitHubJobRunJobType = exports.GitHubBuildTriggerType = exports.GitHubBuildTriggerRunStatus = exports.GitHubBuildTriggerExecutionBehavior = exports.GitHubAppInstallationStatus = exports.GitHubAppInstallationAccountType = exports.GitHubAppEnvironment = exports.FingerprintSourceType = exports.Feature = exports.Experiment = exports.EnvironmentVariableVisibility = exports.EnvironmentVariableScope = exports.EnvironmentSecretType = exports.EntityTypeName = exports.EchoVersionSource = exports.EchoProjectVisibility = exports.EchoProjectUploadSessionType = exports.EchoProjectIconSource = exports.EchoMessageRole = exports.EchoMessagePartType = exports.EchoChatState = exports.EchoChangeType = exports.EchoBuildStatus = exports.EchoAgentType = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildWaiverType = exports.EasBuildDeprecationInfoType = exports.EasBuildBillingResourceClass = void 0;
11
- exports.WorkflowsInsightsRunsOverTimeGranularity = exports.WorkflowsInsightsExportFormat = exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkflowJobReviewDecision = exports.WorkflowDeviceTestCaseStatus = exports.WorkflowArtifactStorageType = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserSpecifiedAccountUsage = exports.UserEntityTypeName = exports.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.UpdateDiffReceiptStateValue = exports.UpdateDiffReceiptOrderByField = exports.UpdateDiffReceiptOrderByDirection = exports.TargetEntityMutationType = exports.SubmissionStatus = exports.SubmissionPriority = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ResponseType = exports.ResponseStatusType = exports.ResponseCacheStatus = exports.ResourceClassExperiment = exports.RequestsOrderByField = exports.RequestsOrderByDirection = exports.RequestMethod = void 0;
9
+ exports.DeviceRunSessionStatus = exports.DashboardViewPin = exports.CustomDomainStatus = exports.CustomDomainDnsRecordType = exports.CrashSampleFor = exports.ContinentCode = exports.BuildWorkflow = exports.BuildTrigger = exports.BuildStatus = exports.BuildRetryDisabledReason = exports.BuildResourceClass = exports.BuildPriority = exports.BuildPhase = exports.BuildMode = exports.BuildLimitThresholdExceededMetadataType = exports.BuildIosEnterpriseProvisioning = exports.BuildCredentialsSource = exports.BuildAnnotationType = exports.BackgroundJobState = exports.BackgroundJobResultType = exports.AuthProviderIdentifier = exports.AuthProtocolType = exports.AuditLogsExportFormat = exports.AssetMetadataStatus = exports.AssetMapSourceType = exports.AppsFilter = exports.AppleTeamType = exports.AppleDeviceClass = exports.AppUploadSessionType = exports.AppStoreConnectUserRole = exports.AppSort = exports.AppProfileImageWidth = exports.AppPrivacy = exports.AppPlatform = exports.AppObserveUpdatesOrderByField = exports.AppObserveUpdatesOrderByDirection = exports.AppObservePropertyType = exports.AppObservePlatform = exports.AppObserveEventsOrderByField = exports.AppObserveEventsOrderByDirection = exports.AppObserveCustomEventNamesOrderByField = exports.AppObserveCustomEventNamesOrderByDirection = exports.AppInternalDistributionBuildPrivacy = exports.AndroidKeystoreType = exports.AndroidFcmVersion = exports.AndroidBuildType = exports.ActivityTimelineProjectActivityType = exports.AccountUploadSessionType = exports.AccountMemberType = exports.AccountAppsSortByField = void 0;
10
+ exports.OnboardingEnvironment = exports.OnboardingDeviceType = exports.OfferType = exports.OAuthProvider = exports.NotificationType = exports.NotificationEvent = exports.LocalBuildArchiveSourceType = exports.JobRunStatus = exports.JobRunPriority = exports.IosSchemeBuildConfiguration = exports.IosManagedBuildType = exports.IosDistributionType = exports.IosBuildType = exports.InvoiceDiscountType = exports.InsightsFilterType = exports.GitHubJobRunTriggerType = exports.GitHubJobRunTriggerRunStatus = exports.GitHubJobRunJobType = exports.GitHubBuildTriggerType = exports.GitHubBuildTriggerRunStatus = exports.GitHubBuildTriggerExecutionBehavior = exports.GitHubAppInstallationStatus = exports.GitHubAppInstallationAccountType = exports.GitHubAppEnvironment = exports.FingerprintSourceType = exports.Feature = exports.Experiment = exports.EnvironmentVariableVisibility = exports.EnvironmentVariableScope = exports.EnvironmentSecretType = exports.EntityTypeName = exports.EchoVersionSource = exports.EchoTurnCompletionStatus = exports.EchoProjectVisibility = exports.EchoProjectUploadSessionType = exports.EchoProjectIconSource = exports.EchoMessageRole = exports.EchoMessagePartType = exports.EchoChatState = exports.EchoChangeType = exports.EchoBuildStatus = exports.EchoAgentType = exports.EasTotalPlanEnablementUnit = exports.EasServiceMetric = exports.EasService = exports.EasBuildWaiverType = exports.EasBuildDeprecationInfoType = exports.EasBuildBillingResourceClass = exports.DistributionType = exports.DeviceRunSessionType = void 0;
11
+ exports.WorkflowsInsightsRunsOverTimeGranularity = exports.WorkflowsInsightsExportFormat = exports.WorkflowRunTriggerEventType = exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkflowJobReviewDecision = exports.WorkflowDeviceTestCaseStatus = exports.WorkflowArtifactStorageType = exports.WorkerLoggerLevel = exports.WorkerDeploymentLogLevel = exports.WorkerDeploymentCrashKind = exports.WebhookType = exports.UserSpecifiedAccountUsage = exports.UserEntityTypeName = exports.UserAgentPlatform = exports.UserAgentOs = exports.UserAgentBrowser = exports.UsageMetricsGranularity = exports.UsageMetricType = exports.UploadSessionType = exports.UpdateDiffReceiptStateValue = exports.UpdateDiffReceiptOrderByField = exports.UpdateDiffReceiptOrderByDirection = exports.TargetEntityMutationType = exports.SubmissionStatus = exports.SubmissionPriority = exports.SubmissionArchiveSourceType = exports.SubmissionAndroidReleaseStatus = exports.SubmissionAndroidArchiveType = exports.StatuspageServiceStatus = exports.StatuspageServiceName = exports.StatuspageIncidentStatus = exports.StatuspageIncidentImpact = exports.StandardOffer = exports.SecondFactorMethod = exports.Role = exports.ResponseType = exports.ResponseStatusType = exports.ResponseCacheStatus = exports.ResourceClassExperiment = exports.RequestsOrderByField = exports.RequestsOrderByDirection = exports.RequestMethod = exports.ProjectArchiveSourceType = exports.Permission = exports.Order = void 0;
12
12
  var AccountAppsSortByField;
13
13
  (function (AccountAppsSortByField) {
14
14
  AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
@@ -66,6 +66,16 @@ var AppInternalDistributionBuildPrivacy;
66
66
  AppInternalDistributionBuildPrivacy["Private"] = "PRIVATE";
67
67
  AppInternalDistributionBuildPrivacy["Public"] = "PUBLIC";
68
68
  })(AppInternalDistributionBuildPrivacy || (exports.AppInternalDistributionBuildPrivacy = AppInternalDistributionBuildPrivacy = {}));
69
+ var AppObserveCustomEventNamesOrderByDirection;
70
+ (function (AppObserveCustomEventNamesOrderByDirection) {
71
+ AppObserveCustomEventNamesOrderByDirection["Asc"] = "ASC";
72
+ AppObserveCustomEventNamesOrderByDirection["Desc"] = "DESC";
73
+ })(AppObserveCustomEventNamesOrderByDirection || (exports.AppObserveCustomEventNamesOrderByDirection = AppObserveCustomEventNamesOrderByDirection = {}));
74
+ var AppObserveCustomEventNamesOrderByField;
75
+ (function (AppObserveCustomEventNamesOrderByField) {
76
+ AppObserveCustomEventNamesOrderByField["Count"] = "COUNT";
77
+ AppObserveCustomEventNamesOrderByField["EventName"] = "EVENT_NAME";
78
+ })(AppObserveCustomEventNamesOrderByField || (exports.AppObserveCustomEventNamesOrderByField = AppObserveCustomEventNamesOrderByField = {}));
69
79
  var AppObserveEventsOrderByDirection;
70
80
  (function (AppObserveEventsOrderByDirection) {
71
81
  AppObserveEventsOrderByDirection["Asc"] = "ASC";
@@ -501,6 +511,12 @@ var EchoProjectVisibility;
501
511
  EchoProjectVisibility["Private"] = "PRIVATE";
502
512
  EchoProjectVisibility["Public"] = "PUBLIC";
503
513
  })(EchoProjectVisibility || (exports.EchoProjectVisibility = EchoProjectVisibility = {}));
514
+ var EchoTurnCompletionStatus;
515
+ (function (EchoTurnCompletionStatus) {
516
+ EchoTurnCompletionStatus["Cancelled"] = "CANCELLED";
517
+ EchoTurnCompletionStatus["Completed"] = "COMPLETED";
518
+ EchoTurnCompletionStatus["Error"] = "ERROR";
519
+ })(EchoTurnCompletionStatus || (exports.EchoTurnCompletionStatus = EchoTurnCompletionStatus = {}));
504
520
  var EchoVersionSource;
505
521
  (function (EchoVersionSource) {
506
522
  EchoVersionSource["Agent"] = "AGENT";
@@ -13,10 +13,17 @@ exports.DeviceRunSessionQuery = {
13
13
  byId(deviceRunSessionId: $deviceRunSessionId) {
14
14
  id
15
15
  status
16
+ type
17
+ remoteConfig {
18
+ __typename
19
+ ... on AgentDeviceRunSessionRemoteConfig {
20
+ url
21
+ token
22
+ }
23
+ }
16
24
  turtleJobRun {
17
25
  id
18
26
  status
19
- logFileUrls
20
27
  }
21
28
  }
22
29
  }