eas-cli 19.1.0 → 20.1.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.
Files changed (51) hide show
  1. package/README.md +371 -100
  2. package/build/commands/go.d.ts +1 -0
  3. package/build/commands/go.js +29 -1
  4. package/build/commands/observe/events.d.ts +3 -3
  5. package/build/commands/observe/events.js +69 -51
  6. package/build/commands/observe/{logs.d.ts → metrics-summary.d.ts} +3 -11
  7. package/build/commands/observe/metrics-summary.js +95 -0
  8. package/build/commands/observe/metrics.d.ts +8 -3
  9. package/build/commands/observe/metrics.js +63 -47
  10. package/build/commands/observe/routes.d.ts +0 -1
  11. package/build/commands/observe/routes.js +0 -4
  12. package/build/commands/observe/versions.d.ts +0 -1
  13. package/build/commands/observe/versions.js +0 -4
  14. package/build/commands/simulator/exec.d.ts +12 -0
  15. package/build/commands/simulator/exec.js +42 -0
  16. package/build/commands/simulator/get.d.ts +2 -1
  17. package/build/commands/simulator/get.js +13 -7
  18. package/build/commands/simulator/start.d.ts +3 -0
  19. package/build/commands/simulator/start.js +65 -5
  20. package/build/commands/simulator/stop.d.ts +2 -1
  21. package/build/commands/simulator/stop.js +16 -9
  22. package/build/commands/update/embedded/delete.d.ts +15 -0
  23. package/build/commands/update/embedded/delete.js +55 -0
  24. package/build/commands/update/embedded/list.d.ts +19 -0
  25. package/build/commands/update/embedded/list.js +132 -0
  26. package/build/commands/update/embedded/upload.d.ts +20 -0
  27. package/build/commands/update/embedded/upload.js +129 -0
  28. package/build/commands/update/embedded/view.d.ts +17 -0
  29. package/build/commands/update/embedded/view.js +75 -0
  30. package/build/graphql/client.js +1 -0
  31. package/build/graphql/generated.d.ts +434 -4
  32. package/build/graphql/generated.js +35 -1
  33. package/build/graphql/mutations/EmbeddedUpdateAssetMutation.d.ts +13 -0
  34. package/build/graphql/mutations/EmbeddedUpdateAssetMutation.js +32 -0
  35. package/build/graphql/mutations/EmbeddedUpdateMutation.d.ts +19 -0
  36. package/build/graphql/mutations/EmbeddedUpdateMutation.js +51 -0
  37. package/build/graphql/queries/EmbeddedUpdateQuery.d.ts +18 -0
  38. package/build/graphql/queries/EmbeddedUpdateQuery.js +81 -0
  39. package/build/graphql/queries/WorkflowRunQuery.d.ts +2 -1
  40. package/build/graphql/queries/WorkflowRunQuery.js +19 -6
  41. package/build/observe/formatCustomEvents.js +5 -5
  42. package/build/observe/metricNames.js +2 -0
  43. package/build/simulator/env.d.ts +7 -0
  44. package/build/simulator/env.js +44 -0
  45. package/build/simulator/utils.d.ts +3 -1
  46. package/build/simulator/utils.js +26 -7
  47. package/build/update/embeddedManifest.d.ts +3 -0
  48. package/build/update/embeddedManifest.js +28 -0
  49. package/oclif.manifest.json +2803 -2309
  50. package/package.json +6 -6
  51. package/build/commands/observe/logs.js +0 -141
@@ -1292,6 +1292,7 @@ export type App = Project & {
1292
1292
  description: Scalars['String']['output'];
1293
1293
  devDomainName?: Maybe<AppDevDomainName>;
1294
1294
  deviceRunSessionsPaginated: AppDeviceRunSessionsConnection;
1295
+ embeddedUpdatesPaginated: AppEmbeddedUpdatesConnection;
1295
1296
  /** Environment secrets for an app */
1296
1297
  environmentSecrets: Array<EnvironmentSecret>;
1297
1298
  environmentVariableEnvironments: Array<Scalars['EnvironmentVariableEnvironment']['output']>;
@@ -1440,6 +1441,8 @@ export type App = Project & {
1440
1441
  workerDeploymentsCrashes?: Maybe<WorkerDeploymentCrashes>;
1441
1442
  workerDeploymentsRequest: WorkerDeploymentRequestEdge;
1442
1443
  workerDeploymentsRequests?: Maybe<WorkerDeploymentRequests>;
1444
+ workflowDeviceTestCaseHistory: WorkflowDeviceTestCaseHistory;
1445
+ workflowDeviceTestCaseInsights: WorkflowDeviceTestCaseInsights;
1443
1446
  workflowRunGitBranchesPaginated: AppWorkflowRunGitBranchesConnection;
1444
1447
  workflowRunsPaginated: AppWorkflowRunsConnection;
1445
1448
  workflows: Array<Workflow>;
@@ -1511,6 +1514,14 @@ export type AppDeviceRunSessionsPaginatedArgs = {
1511
1514
  last?: InputMaybe<Scalars['Int']['input']>;
1512
1515
  };
1513
1516
  /** Represents an Exponent App (or Experience in legacy terms) */
1517
+ export type AppEmbeddedUpdatesPaginatedArgs = {
1518
+ after?: InputMaybe<Scalars['String']['input']>;
1519
+ before?: InputMaybe<Scalars['String']['input']>;
1520
+ filter?: InputMaybe<EmbeddedUpdateFilterInput>;
1521
+ first?: InputMaybe<Scalars['Int']['input']>;
1522
+ last?: InputMaybe<Scalars['Int']['input']>;
1523
+ };
1524
+ /** Represents an Exponent App (or Experience in legacy terms) */
1514
1525
  export type AppEnvironmentSecretsArgs = {
1515
1526
  filterNames?: InputMaybe<Array<Scalars['String']['input']>>;
1516
1527
  };
@@ -1675,6 +1686,17 @@ export type AppWorkerDeploymentsRequestsArgs = {
1675
1686
  timespan: DatasetTimespan;
1676
1687
  };
1677
1688
  /** Represents an Exponent App (or Experience in legacy terms) */
1689
+ export type AppWorkflowDeviceTestCaseHistoryArgs = {
1690
+ filters?: InputMaybe<WorkflowDeviceTestCaseHistoryFiltersInput>;
1691
+ path: Scalars['String']['input'];
1692
+ timespan: WorkflowDeviceTestCaseInsightsTimespanInput;
1693
+ };
1694
+ /** Represents an Exponent App (or Experience in legacy terms) */
1695
+ export type AppWorkflowDeviceTestCaseInsightsArgs = {
1696
+ filters?: InputMaybe<WorkflowDeviceTestCaseInsightsFiltersInput>;
1697
+ timespan: WorkflowDeviceTestCaseInsightsTimespanInput;
1698
+ };
1699
+ /** Represents an Exponent App (or Experience in legacy terms) */
1678
1700
  export type AppWorkflowRunGitBranchesPaginatedArgs = {
1679
1701
  after?: InputMaybe<Scalars['String']['input']>;
1680
1702
  before?: InputMaybe<Scalars['String']['input']>;
@@ -1760,6 +1782,16 @@ export type AppDeviceRunSessionsConnection = {
1760
1782
  edges: Array<AppDeviceRunSessionEdge>;
1761
1783
  pageInfo: PageInfo;
1762
1784
  };
1785
+ export type AppEmbeddedUpdateEdge = {
1786
+ __typename?: 'AppEmbeddedUpdateEdge';
1787
+ cursor: Scalars['String']['output'];
1788
+ node: EmbeddedUpdate;
1789
+ };
1790
+ export type AppEmbeddedUpdatesConnection = {
1791
+ __typename?: 'AppEmbeddedUpdatesConnection';
1792
+ edges: Array<AppEmbeddedUpdateEdge>;
1793
+ pageInfo: PageInfo;
1794
+ };
1763
1795
  export type AppFingerprintEdge = {
1764
1796
  __typename?: 'AppFingerprintEdge';
1765
1797
  cursor: Scalars['String']['output'];
@@ -2042,6 +2074,7 @@ export type AppObserveCustomEvent = {
2042
2074
  eventName: Scalars['String']['output'];
2043
2075
  expoSdkVersion?: Maybe<Scalars['String']['output']>;
2044
2076
  id: Scalars['ID']['output'];
2077
+ ingestedAt?: Maybe<Scalars['DateTime']['output']>;
2045
2078
  properties: Array<AppObserveEventProperty>;
2046
2079
  reactNativeVersion?: Maybe<Scalars['String']['output']>;
2047
2080
  sessionId?: Maybe<Scalars['String']['output']>;
@@ -2126,6 +2159,7 @@ export type AppObserveCustomEventPropertyFilter = {
2126
2159
  export type AppObserveEvent = {
2127
2160
  __typename?: 'AppObserveEvent';
2128
2161
  appBuildNumber: Scalars['String']['output'];
2162
+ appEasBuildId?: Maybe<Scalars['String']['output']>;
2129
2163
  appIdentifier: Scalars['String']['output'];
2130
2164
  appName: Scalars['String']['output'];
2131
2165
  appUpdateId?: Maybe<Scalars['String']['output']>;
@@ -3990,6 +4024,12 @@ export type CreateConvexTeamConnectionInput = {
3990
4024
  };
3991
4025
  export type CreateDeviceRunSessionInput = {
3992
4026
  appId: Scalars['ID']['input'];
4027
+ /**
4028
+ * Override for the underlying turtle job run's max run time, in minutes. Must
4029
+ * be non-negative and smaller than 120 (2 hours). Only customizable on paid
4030
+ * plans. If omitted, the default is derived based on the job run's priority.
4031
+ */
4032
+ maxRunTimeMinutes?: InputMaybe<Scalars['Int']['input']>;
3993
4033
  /**
3994
4034
  * The version of the package backing the device run session (e.g. "0.1.3-alpha.3").
3995
4035
  * If omitted, consumers treat the session as pinned to "latest".
@@ -4313,6 +4353,10 @@ export type DeleteDiscordUserResult = {
4313
4353
  __typename?: 'DeleteDiscordUserResult';
4314
4354
  id: Scalars['ID']['output'];
4315
4355
  };
4356
+ export type DeleteEmbeddedUpdateResult = {
4357
+ __typename?: 'DeleteEmbeddedUpdateResult';
4358
+ id: Scalars['ID']['output'];
4359
+ };
4316
4360
  export type DeleteEnvironmentSecretResult = {
4317
4361
  __typename?: 'DeleteEnvironmentSecretResult';
4318
4362
  id: Scalars['ID']['output'];
@@ -5227,17 +5271,45 @@ export type EmbeddedUpdateAssetUploadSpec = {
5227
5271
  /** Storage key (`{appId}/{embeddedUpdateId}`). Same key in both upload and destination buckets. */
5228
5272
  storageKey: Scalars['String']['output'];
5229
5273
  };
5274
+ export type EmbeddedUpdateFilterInput = {
5275
+ channel?: InputMaybe<Scalars['String']['input']>;
5276
+ platform?: InputMaybe<AppPlatform>;
5277
+ runtimeVersion?: InputMaybe<Scalars['String']['input']>;
5278
+ };
5230
5279
  export type EmbeddedUpdateMutation = {
5231
5280
  __typename?: 'EmbeddedUpdateMutation';
5281
+ /**
5282
+ * Delete an embedded update by id. Best-effort: deleting an unknown id succeeds
5283
+ * (mirrors background deletion jobs). The linked asset row and underlying GCS
5284
+ * object are cleaned up via the entity's afterDelete trigger chain.
5285
+ */
5286
+ deleteEmbeddedUpdate: DeleteEmbeddedUpdateResult;
5232
5287
  /**
5233
5288
  * Register an embedded bundle as the launch asset for a given app/platform/channel.
5234
- * Returns EMBEDDED_UPDATE_ASSET_NOT_AVAILABLE if the asset has not been finalized yet.
5289
+ * Returns EMBEDDED_UPDATE_ASSET_NOT_AVAILABLE if the asset has not been finalized yet,
5290
+ * or EMBEDDED_UPDATE_ALREADY_EXISTS if an embedded update with this id is already registered.
5235
5291
  */
5236
5292
  uploadEmbeddedUpdate: EmbeddedUpdate;
5237
5293
  };
5294
+ export type EmbeddedUpdateMutationDeleteEmbeddedUpdateArgs = {
5295
+ id: Scalars['ID']['input'];
5296
+ };
5238
5297
  export type EmbeddedUpdateMutationUploadEmbeddedUpdateArgs = {
5239
5298
  input: UploadEmbeddedUpdateInput;
5240
5299
  };
5300
+ export type EmbeddedUpdateQuery = {
5301
+ __typename?: 'EmbeddedUpdateQuery';
5302
+ /**
5303
+ * Look up an embedded update by its id and the owning app's id.
5304
+ * Throws EMBEDDED_UPDATE_NOT_FOUND when no embedded update with this id exists on
5305
+ * the given app within the caller's account.
5306
+ */
5307
+ byId: EmbeddedUpdate;
5308
+ };
5309
+ export type EmbeddedUpdateQueryByIdArgs = {
5310
+ appId: Scalars['ID']['input'];
5311
+ embeddedUpdateId: Scalars['ID']['input'];
5312
+ };
5241
5313
  export declare enum EntityTypeName {
5242
5314
  AccountEntity = "AccountEntity",
5243
5315
  AccountSsoConfigurationEntity = "AccountSSOConfigurationEntity",
@@ -5475,6 +5547,8 @@ export type ExperimentationQuery = {
5475
5547
  export type ExpoGoBuildQuery = {
5476
5548
  __typename?: 'ExpoGoBuildQuery';
5477
5549
  repackConfiguration: ExpoGoProjectConfiguration;
5550
+ supportedSdkVersionKeys: Array<Scalars['String']['output']>;
5551
+ supportedSdkVersions: Array<ExpoGoSdkVersion>;
5478
5552
  };
5479
5553
  export type ExpoGoBuildQueryRepackConfigurationArgs = {
5480
5554
  input: ExpoGoRepackInput;
@@ -5496,6 +5570,13 @@ export type ExpoGoRepackInput = {
5496
5570
  bundleId: Scalars['String']['input'];
5497
5571
  sdkVersion?: InputMaybe<Scalars['String']['input']>;
5498
5572
  };
5573
+ export type ExpoGoSdkVersion = {
5574
+ __typename?: 'ExpoGoSdkVersion';
5575
+ isBeta: Scalars['Boolean']['output'];
5576
+ isDeprecated: Scalars['Boolean']['output'];
5577
+ isLatest: Scalars['Boolean']['output'];
5578
+ sdkVersion: Scalars['String']['output'];
5579
+ };
5499
5580
  export type FcmSnippet = FcmSnippetLegacy | FcmSnippetV1;
5500
5581
  export type FcmSnippetLegacy = {
5501
5582
  __typename?: 'FcmSnippetLegacy';
@@ -6296,6 +6377,8 @@ export type JobRun = {
6296
6377
  initiatingActor?: Maybe<Actor>;
6297
6378
  isWaived: Scalars['Boolean']['output'];
6298
6379
  logFileUrls: Array<Scalars['String']['output']>;
6380
+ /** Max run time in seconds for this job run. */
6381
+ maxRunTimeSeconds: Scalars['Int']['output'];
6299
6382
  name: Scalars['String']['output'];
6300
6383
  priority: JobRunPriority;
6301
6384
  /** String describing the worker profile used to run this job run. */
@@ -6303,6 +6386,7 @@ export type JobRun = {
6303
6386
  startedAt?: Maybe<Scalars['DateTime']['output']>;
6304
6387
  status: JobRunStatus;
6305
6388
  updateGroups: Array<Array<Update>>;
6389
+ workflowJob?: Maybe<WorkflowJob>;
6306
6390
  };
6307
6391
  export type JobRunError = {
6308
6392
  __typename?: 'JobRunError';
@@ -7188,6 +7272,7 @@ export type RootQuery = {
7188
7272
  echoProject: EchoProjectQuery;
7189
7273
  /** Top-level query object for querying Echo versions. */
7190
7274
  echoVersion: EchoVersionQuery;
7275
+ embeddedUpdates: EmbeddedUpdateQuery;
7191
7276
  /** Top-level query object for querying Experimentation configuration. */
7192
7277
  experimentation: ExperimentationQuery;
7193
7278
  expoGoBuild: ExpoGoBuildQuery;
@@ -7414,7 +7499,7 @@ export type SsoUser = Actor & UserActor & {
7414
7499
  preferences: UserPreferences;
7415
7500
  /** Associated accounts */
7416
7501
  primaryAccount: Account;
7417
- primaryAccountProfileImageUrl?: Maybe<Scalars['String']['output']>;
7502
+ primaryAccountProfileImageUrl: Scalars['String']['output'];
7418
7503
  /** @deprecated Use primaryAccountProfileImageUrl instead */
7419
7504
  profilePhoto: Scalars['String']['output'];
7420
7505
  /** Snacks associated with this account */
@@ -8491,7 +8576,7 @@ export type User = Actor & UserActor & {
8491
8576
  preferences: UserPreferences;
8492
8577
  /** Associated accounts */
8493
8578
  primaryAccount: Account;
8494
- primaryAccountProfileImageUrl?: Maybe<Scalars['String']['output']>;
8579
+ primaryAccountProfileImageUrl: Scalars['String']['output'];
8495
8580
  /** @deprecated Use primaryAccountProfileImageUrl instead */
8496
8581
  profilePhoto: Scalars['String']['output'];
8497
8582
  /** Get all certified second factor authentication methods */
@@ -8584,7 +8669,7 @@ export type UserActor = {
8584
8669
  preferences: UserPreferences;
8585
8670
  /** Associated accounts */
8586
8671
  primaryAccount: Account;
8587
- primaryAccountProfileImageUrl?: Maybe<Scalars['String']['output']>;
8672
+ primaryAccountProfileImageUrl: Scalars['String']['output'];
8588
8673
  /** @deprecated Use primaryAccountProfileImageUrl instead */
8589
8674
  profilePhoto: Scalars['String']['output'];
8590
8675
  /** Snacks associated with this user's personal account */
@@ -8628,6 +8713,8 @@ export type UserActorPublicData = {
8628
8713
  firstName?: Maybe<Scalars['String']['output']>;
8629
8714
  id: Scalars['ID']['output'];
8630
8715
  lastName?: Maybe<Scalars['String']['output']>;
8716
+ primaryAccountProfileImageUrl: Scalars['String']['output'];
8717
+ /** @deprecated Use primaryAccountProfileImageUrl instead */
8631
8718
  profilePhoto: Scalars['String']['output'];
8632
8719
  /** Snacks associated with this user's personal account */
8633
8720
  snacks: Array<Snack>;
@@ -9585,6 +9672,162 @@ export declare enum WorkflowArtifactStorageType {
9585
9672
  Gcs = "GCS",
9586
9673
  R2 = "R2"
9587
9674
  }
9675
+ /**
9676
+ * Grouping key from the [shard N] prefix-stripped error_message. `count` is
9677
+ * computed with uniqExact(test_case_result_id) so RMT pre-merge duplicates do
9678
+ * not inflate it. Scope: scans ALL status='failed' rows (NOT just
9679
+ * is_final_attempt=1) so failures from runs that ultimately passed on retry
9680
+ * still surface.
9681
+ */
9682
+ export type WorkflowDeviceTestCaseErrorPattern = {
9683
+ __typename?: 'WorkflowDeviceTestCaseErrorPattern';
9684
+ count: Scalars['Int']['output'];
9685
+ lastSeenAt: Scalars['DateTime']['output'];
9686
+ patternKey: Scalars['String']['output'];
9687
+ sampleMessage: Scalars['String']['output'];
9688
+ };
9689
+ export type WorkflowDeviceTestCaseHistory = {
9690
+ __typename?: 'WorkflowDeviceTestCaseHistory';
9691
+ errorPatterns: Array<WorkflowDeviceTestCaseErrorPattern>;
9692
+ recentRuns: WorkflowDeviceTestCaseRecentRunConnection;
9693
+ timeSeries: Array<WorkflowDeviceTestCaseInsightsBucket>;
9694
+ totals: WorkflowDeviceTestCaseInsightsTotals;
9695
+ };
9696
+ export type WorkflowDeviceTestCaseHistoryErrorPatternsArgs = {
9697
+ first: Scalars['Int']['input'];
9698
+ };
9699
+ export type WorkflowDeviceTestCaseHistoryRecentRunsArgs = {
9700
+ after?: InputMaybe<Scalars['String']['input']>;
9701
+ first: Scalars['Int']['input'];
9702
+ };
9703
+ export type WorkflowDeviceTestCaseHistoryTimeSeriesArgs = {
9704
+ granularity: WorkflowDeviceTestCaseInsightsTimeSeriesGranularity;
9705
+ };
9706
+ export type WorkflowDeviceTestCaseHistoryFiltersInput = {
9707
+ gitRefs?: InputMaybe<Array<Scalars['String']['input']>>;
9708
+ workflowIds?: InputMaybe<Array<Scalars['ID']['input']>>;
9709
+ };
9710
+ export type WorkflowDeviceTestCaseInsights = {
9711
+ __typename?: 'WorkflowDeviceTestCaseInsights';
9712
+ facets: WorkflowDeviceTestCaseInsightsFacets;
9713
+ tests: WorkflowDeviceTestCaseStatConnection;
9714
+ timeSeries: Array<WorkflowDeviceTestCaseInsightsBucket>;
9715
+ totals: WorkflowDeviceTestCaseInsightsTotals;
9716
+ };
9717
+ export type WorkflowDeviceTestCaseInsightsTestsArgs = {
9718
+ after?: InputMaybe<Scalars['String']['input']>;
9719
+ first: Scalars['Int']['input'];
9720
+ search?: InputMaybe<Scalars['String']['input']>;
9721
+ sortDirection?: InputMaybe<WorkflowDeviceTestCaseSortDirection>;
9722
+ sortField?: InputMaybe<WorkflowDeviceTestCaseStatSortField>;
9723
+ };
9724
+ export type WorkflowDeviceTestCaseInsightsTimeSeriesArgs = {
9725
+ granularity: WorkflowDeviceTestCaseInsightsTimeSeriesGranularity;
9726
+ };
9727
+ /**
9728
+ * Mutually exclusive bucket counts (passedClean + flaky + failed = totalRuns for the bucket).
9729
+ * Buckets are aligned to the UTC start of the requested granularity interval
9730
+ * (minute / hour / day).
9731
+ */
9732
+ export type WorkflowDeviceTestCaseInsightsBucket = {
9733
+ __typename?: 'WorkflowDeviceTestCaseInsightsBucket';
9734
+ bucketStartAt: Scalars['DateTime']['output'];
9735
+ failed: Scalars['Int']['output'];
9736
+ flaky: Scalars['Int']['output'];
9737
+ passedClean: Scalars['Int']['output'];
9738
+ };
9739
+ export type WorkflowDeviceTestCaseInsightsFacets = {
9740
+ __typename?: 'WorkflowDeviceTestCaseInsightsFacets';
9741
+ gitRefs: Array<Scalars['String']['output']>;
9742
+ tags: Array<Scalars['String']['output']>;
9743
+ workflows: Array<WorkflowDeviceTestCaseWorkflowFacet>;
9744
+ };
9745
+ export type WorkflowDeviceTestCaseInsightsFiltersInput = {
9746
+ gitRefs?: InputMaybe<Array<Scalars['String']['input']>>;
9747
+ statuses?: InputMaybe<Array<WorkflowDeviceTestCaseStatusFilter>>;
9748
+ tags?: InputMaybe<Array<Scalars['String']['input']>>;
9749
+ workflowIds?: InputMaybe<Array<Scalars['ID']['input']>>;
9750
+ };
9751
+ /**
9752
+ * A count metric returned for the current window AND the equivalent prior window
9753
+ * (start − duration → start). The frontend uses (current, previous) to compute
9754
+ * trend deltas. Trend ratios are NOT pre-computed server-side — see
9755
+ * WorkflowsInsightsMetric for the equivalent convention.
9756
+ *
9757
+ * Float (not Int) to match WorkflowsInsightsMetric and avoid the GraphQL Int32
9758
+ * ceiling: 90-day uniqExact counts on a high-volume project can plausibly
9759
+ * exceed 2.1B. Values are integer-valued; the frontend reads them as JS numbers.
9760
+ */
9761
+ export type WorkflowDeviceTestCaseInsightsMetric = {
9762
+ __typename?: 'WorkflowDeviceTestCaseInsightsMetric';
9763
+ currentValue: Scalars['Float']['output'];
9764
+ previousValue: Scalars['Float']['output'];
9765
+ };
9766
+ /**
9767
+ * Same shape as WorkflowDeviceTestCaseInsightsMetric but nullable on both sides —
9768
+ * used for metrics like avgDurationMs / p90DurationMs where "no data in the
9769
+ * window" is meaningful and must not collapse to 0.
9770
+ */
9771
+ export type WorkflowDeviceTestCaseInsightsNullableMetric = {
9772
+ __typename?: 'WorkflowDeviceTestCaseInsightsNullableMetric';
9773
+ currentValue?: Maybe<Scalars['Float']['output']>;
9774
+ previousValue?: Maybe<Scalars['Float']['output']>;
9775
+ };
9776
+ export declare enum WorkflowDeviceTestCaseInsightsTimeSeriesGranularity {
9777
+ Day = "DAY",
9778
+ Hour = "HOUR",
9779
+ Minute = "MINUTE"
9780
+ }
9781
+ export type WorkflowDeviceTestCaseInsightsTimespanInput = {
9782
+ end: Scalars['DateTime']['input'];
9783
+ start: Scalars['DateTime']['input'];
9784
+ };
9785
+ /**
9786
+ * Raw counts only (paired with previous-window values). Pass rate, flake rate,
9787
+ * and trends are computed in the frontend from the (currentValue, previousValue)
9788
+ * pair on each metric.
9789
+ *
9790
+ * totalRuns = passedCleanCount + flakyCount + failedCount (over is_final_attempt=1 rows).
9791
+ * distinctFlakyTestCount cannot be derived in the frontend from per-test rows
9792
+ * because pagination means the frontend doesn't see all test paths.
9793
+ */
9794
+ export type WorkflowDeviceTestCaseInsightsTotals = {
9795
+ __typename?: 'WorkflowDeviceTestCaseInsightsTotals';
9796
+ avgDurationMs: WorkflowDeviceTestCaseInsightsNullableMetric;
9797
+ distinctFlakyTestCount: WorkflowDeviceTestCaseInsightsMetric;
9798
+ failedCount: WorkflowDeviceTestCaseInsightsMetric;
9799
+ flakyCount: WorkflowDeviceTestCaseInsightsMetric;
9800
+ p90DurationMs: WorkflowDeviceTestCaseInsightsNullableMetric;
9801
+ passedCleanCount: WorkflowDeviceTestCaseInsightsMetric;
9802
+ totalRuns: WorkflowDeviceTestCaseInsightsMetric;
9803
+ };
9804
+ /**
9805
+ * One row per execution (is_final_attempt=1). The is_flaky boolean drives the
9806
+ * FLAKY pill — no per-attempt timeline is exposed in v1.
9807
+ */
9808
+ export type WorkflowDeviceTestCaseRecentRun = {
9809
+ __typename?: 'WorkflowDeviceTestCaseRecentRun';
9810
+ commitSha?: Maybe<Scalars['String']['output']>;
9811
+ createdAt: Scalars['DateTime']['output'];
9812
+ durationMs?: Maybe<Scalars['Int']['output']>;
9813
+ gitRef?: Maybe<Scalars['String']['output']>;
9814
+ id: Scalars['ID']['output'];
9815
+ isFlaky: Scalars['Boolean']['output'];
9816
+ status: WorkflowDeviceTestCaseStatus;
9817
+ workflowRunId: Scalars['ID']['output'];
9818
+ workflowRunName: Scalars['String']['output'];
9819
+ };
9820
+ export type WorkflowDeviceTestCaseRecentRunConnection = {
9821
+ __typename?: 'WorkflowDeviceTestCaseRecentRunConnection';
9822
+ edges: Array<WorkflowDeviceTestCaseRecentRunEdge>;
9823
+ pageInfo: PageInfo;
9824
+ totalCount: Scalars['Int']['output'];
9825
+ };
9826
+ export type WorkflowDeviceTestCaseRecentRunEdge = {
9827
+ __typename?: 'WorkflowDeviceTestCaseRecentRunEdge';
9828
+ cursor: Scalars['String']['output'];
9829
+ node: WorkflowDeviceTestCaseRecentRun;
9830
+ };
9588
9831
  /** A device test case result from a Maestro test execution. */
9589
9832
  export type WorkflowDeviceTestCaseResult = {
9590
9833
  __typename?: 'WorkflowDeviceTestCaseResult';
@@ -9633,11 +9876,65 @@ export type WorkflowDeviceTestCaseResultMutation = {
9633
9876
  export type WorkflowDeviceTestCaseResultMutationCreateWorkflowDeviceTestCaseResultsArgs = {
9634
9877
  input: CreateWorkflowDeviceTestCaseResultsInput;
9635
9878
  };
9879
+ export declare enum WorkflowDeviceTestCaseSortDirection {
9880
+ Asc = "ASC",
9881
+ Desc = "DESC"
9882
+ }
9883
+ export type WorkflowDeviceTestCaseStat = {
9884
+ __typename?: 'WorkflowDeviceTestCaseStat';
9885
+ avgDurationMs?: Maybe<Scalars['Int']['output']>;
9886
+ failedCount: Scalars['Int']['output'];
9887
+ flakyCount: Scalars['Int']['output'];
9888
+ lastRunAt: Scalars['DateTime']['output'];
9889
+ lastRunIsFlaky: Scalars['Boolean']['output'];
9890
+ lastRunStatus: WorkflowDeviceTestCaseStatus;
9891
+ name: Scalars['String']['output'];
9892
+ p90DurationMs?: Maybe<Scalars['Int']['output']>;
9893
+ passedCleanCount: Scalars['Int']['output'];
9894
+ path: Scalars['String']['output'];
9895
+ totalRuns: Scalars['Int']['output'];
9896
+ };
9897
+ export type WorkflowDeviceTestCaseStatConnection = {
9898
+ __typename?: 'WorkflowDeviceTestCaseStatConnection';
9899
+ edges: Array<WorkflowDeviceTestCaseStatEdge>;
9900
+ pageInfo: PageInfo;
9901
+ totalCount: Scalars['Int']['output'];
9902
+ };
9903
+ export type WorkflowDeviceTestCaseStatEdge = {
9904
+ __typename?: 'WorkflowDeviceTestCaseStatEdge';
9905
+ cursor: Scalars['String']['output'];
9906
+ node: WorkflowDeviceTestCaseStat;
9907
+ };
9908
+ export declare enum WorkflowDeviceTestCaseStatSortField {
9909
+ Fails = "FAILS",
9910
+ Flakes = "FLAKES",
9911
+ FlakeRate = "FLAKE_RATE",
9912
+ LastRun = "LAST_RUN",
9913
+ P90Duration = "P90_DURATION",
9914
+ PassRate = "PASS_RATE",
9915
+ Runs = "RUNS"
9916
+ }
9636
9917
  /** Status of a device test case execution. */
9637
9918
  export declare enum WorkflowDeviceTestCaseStatus {
9638
9919
  Failed = "FAILED",
9639
9920
  Passed = "PASSED"
9640
9921
  }
9922
+ /**
9923
+ * Mutually exclusive — matches the chart bucket semantics (passedClean / flaky / failed).
9924
+ * PASSED_CLEAN = is_final_attempt=1 AND status=passed AND is_flaky=0
9925
+ * FLAKY = is_final_attempt=1 AND is_flaky=1 (still a pass, just with retries)
9926
+ * FAILED = is_final_attempt=1 AND status=failed
9927
+ */
9928
+ export declare enum WorkflowDeviceTestCaseStatusFilter {
9929
+ Failed = "FAILED",
9930
+ Flaky = "FLAKY",
9931
+ PassedClean = "PASSED_CLEAN"
9932
+ }
9933
+ export type WorkflowDeviceTestCaseWorkflowFacet = {
9934
+ __typename?: 'WorkflowDeviceTestCaseWorkflowFacet';
9935
+ id: Scalars['ID']['output'];
9936
+ name: Scalars['String']['output'];
9937
+ };
9641
9938
  export type WorkflowJob = {
9642
9939
  __typename?: 'WorkflowJob';
9643
9940
  allDeviceTestCaseResults: Array<WorkflowDeviceTestCaseResult>;
@@ -14525,6 +14822,53 @@ export type EnsureDeviceRunSessionStoppedMutation = {
14525
14822
  };
14526
14823
  };
14527
14824
  };
14825
+ export type GetSignedEmbeddedUpdateAssetUploadSpecMutationVariables = Exact<{
14826
+ appId: Scalars['ID']['input'];
14827
+ embeddedUpdateId: Scalars['ID']['input'];
14828
+ contentType: Scalars['String']['input'];
14829
+ }>;
14830
+ export type GetSignedEmbeddedUpdateAssetUploadSpecMutation = {
14831
+ __typename?: 'RootMutation';
14832
+ embeddedUpdateAsset: {
14833
+ __typename?: 'EmbeddedUpdateAssetMutation';
14834
+ getSignedEmbeddedUpdateAssetUploadSpecifications: {
14835
+ __typename?: 'EmbeddedUpdateAssetUploadSpec';
14836
+ storageKey: string;
14837
+ presignedUrl: string;
14838
+ fields: any;
14839
+ };
14840
+ };
14841
+ };
14842
+ export type UploadEmbeddedUpdateMutationVariables = Exact<{
14843
+ input: UploadEmbeddedUpdateInput;
14844
+ }>;
14845
+ export type UploadEmbeddedUpdateMutation = {
14846
+ __typename?: 'RootMutation';
14847
+ embeddedUpdate: {
14848
+ __typename?: 'EmbeddedUpdateMutation';
14849
+ uploadEmbeddedUpdate: {
14850
+ __typename?: 'EmbeddedUpdate';
14851
+ id: string;
14852
+ platform: AppPlatform;
14853
+ runtimeVersion: string;
14854
+ channel: string;
14855
+ createdAt: any;
14856
+ };
14857
+ };
14858
+ };
14859
+ export type DeleteEmbeddedUpdateMutationVariables = Exact<{
14860
+ id: Scalars['ID']['input'];
14861
+ }>;
14862
+ export type DeleteEmbeddedUpdateMutation = {
14863
+ __typename?: 'RootMutation';
14864
+ embeddedUpdate: {
14865
+ __typename?: 'EmbeddedUpdateMutation';
14866
+ deleteEmbeddedUpdate: {
14867
+ __typename?: 'DeleteEmbeddedUpdateResult';
14868
+ id: string;
14869
+ };
14870
+ };
14871
+ };
14528
14872
  export type CreateEnvironmentSecretForAccountMutationVariables = Exact<{
14529
14873
  input: CreateEnvironmentSecretInput;
14530
14874
  accountId: Scalars['String']['input'];
@@ -17059,6 +17403,76 @@ export type DeviceRunSessionsByAppIdQuery = {
17059
17403
  };
17060
17404
  };
17061
17405
  };
17406
+ export type ViewEmbeddedUpdateByIdQueryVariables = Exact<{
17407
+ embeddedUpdateId: Scalars['ID']['input'];
17408
+ appId: Scalars['ID']['input'];
17409
+ }>;
17410
+ export type ViewEmbeddedUpdateByIdQuery = {
17411
+ __typename?: 'RootQuery';
17412
+ embeddedUpdates: {
17413
+ __typename?: 'EmbeddedUpdateQuery';
17414
+ byId: {
17415
+ __typename?: 'EmbeddedUpdate';
17416
+ id: string;
17417
+ platform: AppPlatform;
17418
+ runtimeVersion: string;
17419
+ channel: string;
17420
+ createdAt: any;
17421
+ launchAsset: {
17422
+ __typename?: 'EmbeddedUpdateAsset';
17423
+ id: string;
17424
+ fileSize: number;
17425
+ finalFileSize?: number | null;
17426
+ fileSHA256: string;
17427
+ };
17428
+ };
17429
+ };
17430
+ };
17431
+ export type ViewEmbeddedUpdatesPaginatedQueryVariables = Exact<{
17432
+ appId: Scalars['String']['input'];
17433
+ first: Scalars['Int']['input'];
17434
+ after?: InputMaybe<Scalars['String']['input']>;
17435
+ filter?: InputMaybe<EmbeddedUpdateFilterInput>;
17436
+ }>;
17437
+ export type ViewEmbeddedUpdatesPaginatedQuery = {
17438
+ __typename?: 'RootQuery';
17439
+ app: {
17440
+ __typename?: 'AppQuery';
17441
+ byId: {
17442
+ __typename?: 'App';
17443
+ id: string;
17444
+ embeddedUpdatesPaginated: {
17445
+ __typename?: 'AppEmbeddedUpdatesConnection';
17446
+ edges: Array<{
17447
+ __typename?: 'AppEmbeddedUpdateEdge';
17448
+ cursor: string;
17449
+ node: {
17450
+ __typename?: 'EmbeddedUpdate';
17451
+ id: string;
17452
+ platform: AppPlatform;
17453
+ runtimeVersion: string;
17454
+ channel: string;
17455
+ createdAt: any;
17456
+ launchAsset: {
17457
+ __typename?: 'EmbeddedUpdateAsset';
17458
+ id: string;
17459
+ fileSize: number;
17460
+ finalFileSize?: number | null;
17461
+ fileSHA256: string;
17462
+ };
17463
+ };
17464
+ }>;
17465
+ pageInfo: {
17466
+ __typename?: 'PageInfo';
17467
+ hasNextPage: boolean;
17468
+ hasPreviousPage: boolean;
17469
+ startCursor?: string | null;
17470
+ endCursor?: string | null;
17471
+ };
17472
+ };
17473
+ };
17474
+ };
17475
+ };
17062
17476
  export type EnvironmentSecretsByAppIdQueryVariables = Exact<{
17063
17477
  appId: Scalars['String']['input'];
17064
17478
  }>;
@@ -18596,6 +19010,22 @@ export type WorkflowJobByIdQuery = {
18596
19010
  };
18597
19011
  };
18598
19012
  };
19013
+ export type ExpoGoSupportedSdkVersionsQueryVariables = Exact<{
19014
+ [key: string]: never;
19015
+ }>;
19016
+ export type ExpoGoSupportedSdkVersionsQuery = {
19017
+ __typename?: 'RootQuery';
19018
+ expoGoBuild: {
19019
+ __typename?: 'ExpoGoBuildQuery';
19020
+ supportedSdkVersions: Array<{
19021
+ __typename?: 'ExpoGoSdkVersion';
19022
+ sdkVersion: string;
19023
+ isLatest: boolean;
19024
+ isBeta: boolean;
19025
+ isDeprecated: boolean;
19026
+ }>;
19027
+ };
19028
+ };
18599
19029
  export type ExpoGoRepackConfigurationQueryVariables = Exact<{
18600
19030
  input: ExpoGoRepackInput;
18601
19031
  }>;
@@ -8,7 +8,8 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  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.AppObserveNavigationRoutesOrderByField = 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
10
  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 = exports.DeviceRunSessionStatus = 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 = exports.OnboardingEnvironment = void 0;
11
+ exports.WorkflowRunStatus = exports.WorkflowProjectSourceType = exports.WorkflowJobType = exports.WorkflowJobStatus = exports.WorkflowJobReviewDecision = exports.WorkflowDeviceTestCaseStatusFilter = exports.WorkflowDeviceTestCaseStatus = exports.WorkflowDeviceTestCaseStatSortField = exports.WorkflowDeviceTestCaseSortDirection = exports.WorkflowDeviceTestCaseInsightsTimeSeriesGranularity = 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 = exports.OnboardingEnvironment = void 0;
12
+ exports.WorkflowsInsightsRunsOverTimeGranularity = exports.WorkflowsInsightsExportFormat = exports.WorkflowRunTriggerEventType = void 0;
12
13
  var AccountAppsSortByField;
13
14
  (function (AccountAppsSortByField) {
14
15
  AccountAppsSortByField["LatestActivityTime"] = "LATEST_ACTIVITY_TIME";
@@ -1065,12 +1066,45 @@ var WorkflowArtifactStorageType;
1065
1066
  WorkflowArtifactStorageType["Gcs"] = "GCS";
1066
1067
  WorkflowArtifactStorageType["R2"] = "R2";
1067
1068
  })(WorkflowArtifactStorageType || (exports.WorkflowArtifactStorageType = WorkflowArtifactStorageType = {}));
1069
+ var WorkflowDeviceTestCaseInsightsTimeSeriesGranularity;
1070
+ (function (WorkflowDeviceTestCaseInsightsTimeSeriesGranularity) {
1071
+ WorkflowDeviceTestCaseInsightsTimeSeriesGranularity["Day"] = "DAY";
1072
+ WorkflowDeviceTestCaseInsightsTimeSeriesGranularity["Hour"] = "HOUR";
1073
+ WorkflowDeviceTestCaseInsightsTimeSeriesGranularity["Minute"] = "MINUTE";
1074
+ })(WorkflowDeviceTestCaseInsightsTimeSeriesGranularity || (exports.WorkflowDeviceTestCaseInsightsTimeSeriesGranularity = WorkflowDeviceTestCaseInsightsTimeSeriesGranularity = {}));
1075
+ var WorkflowDeviceTestCaseSortDirection;
1076
+ (function (WorkflowDeviceTestCaseSortDirection) {
1077
+ WorkflowDeviceTestCaseSortDirection["Asc"] = "ASC";
1078
+ WorkflowDeviceTestCaseSortDirection["Desc"] = "DESC";
1079
+ })(WorkflowDeviceTestCaseSortDirection || (exports.WorkflowDeviceTestCaseSortDirection = WorkflowDeviceTestCaseSortDirection = {}));
1080
+ var WorkflowDeviceTestCaseStatSortField;
1081
+ (function (WorkflowDeviceTestCaseStatSortField) {
1082
+ WorkflowDeviceTestCaseStatSortField["Fails"] = "FAILS";
1083
+ WorkflowDeviceTestCaseStatSortField["Flakes"] = "FLAKES";
1084
+ WorkflowDeviceTestCaseStatSortField["FlakeRate"] = "FLAKE_RATE";
1085
+ WorkflowDeviceTestCaseStatSortField["LastRun"] = "LAST_RUN";
1086
+ WorkflowDeviceTestCaseStatSortField["P90Duration"] = "P90_DURATION";
1087
+ WorkflowDeviceTestCaseStatSortField["PassRate"] = "PASS_RATE";
1088
+ WorkflowDeviceTestCaseStatSortField["Runs"] = "RUNS";
1089
+ })(WorkflowDeviceTestCaseStatSortField || (exports.WorkflowDeviceTestCaseStatSortField = WorkflowDeviceTestCaseStatSortField = {}));
1068
1090
  /** Status of a device test case execution. */
1069
1091
  var WorkflowDeviceTestCaseStatus;
1070
1092
  (function (WorkflowDeviceTestCaseStatus) {
1071
1093
  WorkflowDeviceTestCaseStatus["Failed"] = "FAILED";
1072
1094
  WorkflowDeviceTestCaseStatus["Passed"] = "PASSED";
1073
1095
  })(WorkflowDeviceTestCaseStatus || (exports.WorkflowDeviceTestCaseStatus = WorkflowDeviceTestCaseStatus = {}));
1096
+ /**
1097
+ * Mutually exclusive — matches the chart bucket semantics (passedClean / flaky / failed).
1098
+ * PASSED_CLEAN = is_final_attempt=1 AND status=passed AND is_flaky=0
1099
+ * FLAKY = is_final_attempt=1 AND is_flaky=1 (still a pass, just with retries)
1100
+ * FAILED = is_final_attempt=1 AND status=failed
1101
+ */
1102
+ var WorkflowDeviceTestCaseStatusFilter;
1103
+ (function (WorkflowDeviceTestCaseStatusFilter) {
1104
+ WorkflowDeviceTestCaseStatusFilter["Failed"] = "FAILED";
1105
+ WorkflowDeviceTestCaseStatusFilter["Flaky"] = "FLAKY";
1106
+ WorkflowDeviceTestCaseStatusFilter["PassedClean"] = "PASSED_CLEAN";
1107
+ })(WorkflowDeviceTestCaseStatusFilter || (exports.WorkflowDeviceTestCaseStatusFilter = WorkflowDeviceTestCaseStatusFilter = {}));
1074
1108
  var WorkflowJobReviewDecision;
1075
1109
  (function (WorkflowJobReviewDecision) {
1076
1110
  WorkflowJobReviewDecision["Approved"] = "APPROVED";