about summary refs log tree commit diff
path: root/pkgs/development/tools/rover/schema/schema.graphql
blob: 8cc527f4f822daf7e47d69d72378207052516b95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
schema {
  query: Query
  mutation: Mutation
}

"""An organization in Apollo Studio. Can have multiple members and graphs."""
type Organization {
  auditLogExports: [AuditLogExport!]
  """Graphs belonging to this organization."""
  graphs(includeDeleted: Boolean): [Graph!]!
  """Globally unique identifier, which isn't guaranteed stable (can be changed by administrators)."""
  id: ID!
  """Name of the organization, which can change over time and isn't unique."""
  name: String!
  """Graphs belonging to this organization."""
  services(includeDeleted: Boolean): [Graph!]! @deprecated(reason: "Use graphs field instead")
}

type OrganizationMutation {
  """Trigger a request for an audit export"""
  requestAuditExport(actors: [ActorInput!], from: Timestamp!, graphIds: [String!], to: Timestamp!): Organization
}

"""Represents an actor that performs actions in Apollo Studio. Most actors are either a `USER` or a `GRAPH` (based on a request's provided API key), and they have the corresponding `ActorType`."""
type Actor {
  actorId: ID!
  type: ActorType!
}

"""Input type to provide when specifying an `Actor` in operation arguments. See also the `Actor` object type."""
input ActorInput {
  actorId: ID!
  type: ActorType!
}

enum ActorType {
  ANONYMOUS_USER
  BACKFILL
  CRON
  GRAPH
  INTERNAL_IDENTITY
  SYNCHRONIZATION
  SYSTEM
  USER
}

union AddOperationCollectionEntriesResult = AddOperationCollectionEntriesSuccess | PermissionError | ValidationError

type AddOperationCollectionEntriesSuccess {
  operationCollectionEntries: [OperationCollectionEntry!]!
}

union AddOperationCollectionEntryResult = OperationCollectionEntry | PermissionError | ValidationError

input AddOperationInput {
  """The operation's fields."""
  document: OperationCollectionEntryStateInput!
  """The operation's name."""
  name: String!
}

type AffectedQuery {
  id: ID!
  """First 128 characters of query signature for display"""
  signature: String
  """Name to display to the user for the operation"""
  displayName: String
  """Name provided for the operation, which can be empty string if it is an anonymous operation"""
  name: String
  """Determines if this query validates against the proposed schema"""
  isValid: Boolean
  """List of changes affecting this query. Returns null if queried from SchemaDiff.changes.affectedQueries.changes"""
  changes: [ChangeOnOperation!]
  """Whether this operation was ignored and its severity was downgraded for that reason"""
  markedAsIgnored: Boolean
  """Whether the changes were marked as safe and its severity was downgraded for that reason"""
  markedAsSafe: Boolean
  """If the operation would be approved if the check ran again. Returns null if queried from SchemaDiff.changes.affectedQueries.alreadyApproved"""
  alreadyApproved: Boolean
  """If the operation would be ignored if the check ran again"""
  alreadyIgnored: Boolean
}

"""
Represents an API key that's used to authenticate a
particular Apollo user or graph.
"""
interface ApiKey {
  """The API key's ID."""
  id: ID!
  """The API key's name, for distinguishing it from other keys."""
  keyName: String
  """The value of the API key. **This is a secret credential!**"""
  token: String!
}

type ApiKeyProvision {
  apiKey: ApiKey!
  created: Boolean!
}

type AuditLogExport {
  """The list of actors to filter the audit export"""
  actors: [Identity!]
  """The time when the audit export was completed"""
  completedAt: Timestamp
  """The time when the audit export was reqeusted"""
  createdAt: Timestamp!
  """List of URLs to download the audits for the requested range"""
  downloadUrls: [String!]
  """The starting point of audits to include in export"""
  from: Timestamp!
  """The list of graphs to filter the audit export"""
  graphs: [Graph!]
  """The id for the audit export"""
  id: ID!
  """The user that initiated the audit export"""
  requester: User
  """The status of the audit export"""
  status: AuditStatus!
  """The end point of audits to include in export"""
  to: Timestamp!
}

enum AuditStatus {
  CANCELLED
  COMPLETED
  EXPIRED
  FAILED
  IN_PROGRESS
  QUEUED
}

"""The building of a Studio variant (including supergraph composition and any contract filtering) as part of a launch."""
type Build {
  """The inputs provided to the build, including subgraph and contract details."""
  input: BuildInput!
  """The result of the build. This value is null until the build completes."""
  result: BuildResult
}

"""A single error that occurred during the failed execution of a build."""
type BuildError {
  code: String
  locations: [SourceLocation!]!
  message: String!
}

"""Contains the details of an executed build that failed."""
type BuildFailure {
  """A list of all errors that occurred during the failed build."""
  errorMessages: [BuildError!]!
}

union BuildInput = CompositionBuildInput | FilterBuildInput

union BuildResult = BuildFailure | BuildSuccess

"""Contains the details of an executed build that succeeded."""
type BuildSuccess {
  """Contains the supergraph and API schemas created by composition."""
  coreSchema: CoreSchema!
}

"""A single change that was made to a definition in a schema."""
type Change {
  """The severity of the change (e.g., `FAILURE` or `NOTICE`)"""
  severity: ChangeSeverity!
  """Indicates the type of change that was made, and to what (e.g., 'TYPE_REMOVED')."""
  code: String!
  """Indication of the category of the change (e.g. addition, removal, edit)."""
  category: ChangeCategory!
  """A human-readable description of the change."""
  description: String!
  affectedQueries: [AffectedQuery!]
  """Top level node affected by the change."""
  parentNode: NamedIntrospectionType
  """
  Node related to the top level node that was changed, such as a field in an object,
  a value in an enum or the object of an interface.
  """
  childNode: NamedIntrospectionValue
  """Target arg of change made."""
  argNode: NamedIntrospectionArg
}

"""
Defines a set of categories that a schema change
can be grouped by.
"""
enum ChangeCategory {
  ADDITION
  EDIT
  REMOVAL
  DEPRECATION
}

"""
These schema change codes represent all of the possible changes that can
occur during the schema diff algorithm.
"""
enum ChangeCode {
  """Field was removed from the type."""
  FIELD_REMOVED
  """Type (object or scalar) was removed from the schema."""
  TYPE_REMOVED
  """Argument to a field was removed."""
  ARG_REMOVED
  """Type is no longer included in the union."""
  TYPE_REMOVED_FROM_UNION
  """Field was removed from the input object."""
  FIELD_REMOVED_FROM_INPUT_OBJECT
  """Value was removed from the enum."""
  VALUE_REMOVED_FROM_ENUM
  """Type no longer implements the interface."""
  TYPE_REMOVED_FROM_INTERFACE
  """Non-nullable argument was added to the field."""
  REQUIRED_ARG_ADDED
  """Non-nullable field was added to the input object. (Deprecated.)"""
  NON_NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT
  """Required field was added to the input object."""
  REQUIRED_FIELD_ADDED_TO_INPUT_OBJECT
  """Return type for the field was changed."""
  FIELD_CHANGED_TYPE
  """Type of the field in the input object was changed."""
  FIELD_ON_INPUT_OBJECT_CHANGED_TYPE
  """
  Type was changed from one kind to another.
  Ex: scalar to object or enum to union.
  """
  TYPE_CHANGED_KIND
  """Type of the argument was changed."""
  ARG_CHANGED_TYPE
  """Argument was changed from nullable to non-nullable."""
  ARG_CHANGED_TYPE_OPTIONAL_TO_REQUIRED
  """A new value was added to the enum."""
  VALUE_ADDED_TO_ENUM
  """A new value was added to the enum."""
  TYPE_ADDED_TO_UNION
  """Type now implements the interface."""
  TYPE_ADDED_TO_INTERFACE
  """Default value added or changed for the argument."""
  ARG_DEFAULT_VALUE_CHANGE
  """Nullable argument was added to the field."""
  OPTIONAL_ARG_ADDED
  """Nullable field was added to the input type. (Deprecated.)"""
  NULLABLE_FIELD_ADDED_TO_INPUT_OBJECT
  """Optional field was added to the input type."""
  OPTIONAL_FIELD_ADDED_TO_INPUT_OBJECT
  """Field was added to the type."""
  FIELD_ADDED
  """Type was added to the schema."""
  TYPE_ADDED
  """Enum was deprecated."""
  ENUM_DEPRECATED
  """Enum deprecation was removed."""
  ENUM_DEPRECATION_REMOVED
  """Reason for enum deprecation changed."""
  ENUM_DEPRECATED_REASON_CHANGE
  """Field was deprecated."""
  FIELD_DEPRECATED
  """Field deprecation removed."""
  FIELD_DEPRECATION_REMOVED
  """Reason for field deprecation changed."""
  FIELD_DEPRECATED_REASON_CHANGE
  """Description was added, removed, or updated for type."""
  TYPE_DESCRIPTION_CHANGE
  """Description was added, removed, or updated for field."""
  FIELD_DESCRIPTION_CHANGE
  """Description was added, removed, or updated for enum value."""
  ENUM_VALUE_DESCRIPTION_CHANGE
  """Description was added, removed, or updated for argument."""
  ARG_DESCRIPTION_CHANGE
  """Directive was removed."""
  DIRECTIVE_REMOVED
  """Argument to the directive was removed."""
  DIRECTIVE_ARG_REMOVED
  """Location of the directive was removed."""
  DIRECTIVE_LOCATION_REMOVED
  """Repeatable flag was removed for directive."""
  DIRECTIVE_REPEATABLE_REMOVED
  """Non-nullable argument added to directive."""
  REQUIRED_DIRECTIVE_ARG_ADDED
}

"""
Represents the tuple of static information
about a particular kind of schema change.
"""
type ChangeDefinition {
  code: ChangeCode!
  defaultSeverity: ChangeSeverity!
  category: ChangeCategory!
}

"""An addition made to a Studio variant's changelog after a launch."""
type ChangelogLaunchResult {
  createdAt: Timestamp!
  schemaTagID: ID!
}

"""Info about a change in the context of an operation it affects"""
type ChangeOnOperation {
  """The semantic info about this change, i.e. info about the change that doesn't depend on the operation"""
  semanticChange: SemanticChange!
  """Human-readable explanation of the impact of this change on the operation"""
  impact: String
}

enum ChangeSeverity {
  FAILURE
  NOTICE
}

"""
Summary of the changes for a schema diff, computed by placing the changes into categories and then
counting the size of each category. This categorization can be done in different ways, and
accordingly there are multiple fields here for each type of categorization.

Note that if an object or interface field is added/removed, there won't be any addition/removal
changes generated for its arguments or @deprecated usages. If an enum type is added/removed, there
will be addition/removal changes generated for its values, but not for those values' @deprecated
usages. Description changes won't be generated for a schema element if that element (or an
ancestor) was added/removed.
"""
type ChangeSummary {
  """
  Counts for changes to non-field aspects of objects, input objects, and interfaces,
  and all aspects of enums, unions, and scalars.
  """
  type: TypeChangeSummaryCounts!
  """Counts for changes to fields of objects, input objects, and interfaces."""
  field: FieldChangeSummaryCounts!
  """Counts for all changes."""
  total: TotalChangeSummaryCounts!
}

enum ChangeType {
  FAILURE
  NOTICE
}

"""Filter options available when listing checks."""
input CheckFilterInput {
  authors: [String!]
  branches: [String!]
  subgraphs: [String!]
  status: CheckFilterInputStatusOption
  variants: [String!]
}

"""Options for filtering CheckWorkflows by status"""
enum CheckFilterInputStatusOption {
  FAILED
  PENDING
  PASSED
}

"""The result of performing a subgraph check, including all steps."""
type CheckPartialSchemaResult {
  """Result of compostion run as part of the overall subgraph check."""
  compositionValidationResult: CompositionCheckResult!
  """Overall result of the check. This will be null if composition validation was unsuccessful."""
  checkSchemaResult: CheckSchemaResult
  """Whether any modifications were detected in the composed core schema."""
  coreSchemaModified: Boolean!
}

"""The possible results of a request to initiate schema checks (either a success object or one of multiple `Error` objects)."""
union CheckRequestResult = CheckRequestSuccess | InvalidInputError | PermissionError | PlanError

"""Represents a successfully initiated execution of schema checks. This does not indicate the _result_ of the checks, only that they were initiated."""
type CheckRequestSuccess {
  """The URL of the Apollo Studio page for this check."""
  targetURL: String!
  """The unique ID for this execution of schema checks."""
  workflowID: ID!
}

"""Input type to provide when running schema checks asynchronously for a non-federated graph."""
input CheckSchemaAsyncInput {
  """Configuration options for the check execution."""
  config: HistoricQueryParametersInput!
  """The GitHub context to associate with the check."""
  gitContext: GitContextInput!
  graphRef: ID @deprecated(reason: "This field is not required to be sent anymore")
  """The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`."""
  introspectionEndpoint: String
  """If `true`, the check was initiated by Apollo Sandbox."""
  isSandbox: Boolean!
  proposedSchemaDocument: String
}

"""The result of running schema checks on a graph variant."""
type CheckSchemaResult {
  """The schema diff and affected operations generated by the schema check."""
  diffToPrevious: SchemaDiff!
  """The URL to view the schema diff in Studio."""
  targetUrl: String
}

type CheckWorkflow {
  """
  The variant provided as a base to check against. Only the differences from the
  base schema will be tested in operations checks.
  """
  baseVariant: GraphVariant
  """The timestamp when the check workflow completed."""
  completedAt: Timestamp
  id: ID!
  """The name of the implementing service that was responsible for triggering the validation."""
  implementingServiceName: String
  """The timestamp when the check workflow started."""
  startedAt: Timestamp
  """Overall status of the workflow, based on the underlying task statuses."""
  status: CheckWorkflowStatus!
  """The set of check tasks associated with this workflow, e.g. composition, operations, etc."""
  tasks: [CheckWorkflowTask!]!
  """Contextual parameters supplied by the runtime environment where the check was run."""
  gitContext: GitContext
  createdAt: Timestamp!
}

enum CheckWorkflowStatus {
  FAILED
  PASSED
  PENDING
}

interface CheckWorkflowTask {
  completedAt: Timestamp
  createdAt: Timestamp!
  id: ID!
  """
  The status of this task. All tasks start with the PENDING status while initializing. If any
   prerequisite task fails, then the task status becomes BLOCKED. Otherwise, if all prerequisite
   tasks pass, then this task runs (still having the PENDING status). Once the task completes, the
   task status will become either PASSED or FAILED.
  """
  status: CheckWorkflowTaskStatus!
  """A studio UI url to view the details of this check workflow task"""
  targetURL: String
  """The workflow that this task belongs to."""
  workflow: CheckWorkflow!
}

enum CheckWorkflowTaskStatus {
  BLOCKED
  FAILED
  PASSED
  PENDING
}

"""Filter options to exclude by client reference ID, client name, and client version."""
input ClientInfoFilter {
  name: String!
  """Ignored"""
  referenceID: ID
  version: String
}

"""The result of supergraph composition that Studio performed in response to an attempted deletion of a subgraph."""
type SubgraphRemovalResult {
  """A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."""
  errors: [SchemaCompositionError]!
  """Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result."""
  updatedGateway: Boolean!
}

"""The result of supergraph composition that Studio performed in response to an attempted publish of a subgraph."""
type SubgraphPublicationResult {
  """The generated composition config, or null if any errors occurred."""
  compositionConfig: CompositionConfig
  """A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."""
  errors: [SchemaCompositionError]!
  """Whether this composition result resulted in a new supergraph schema passed to Uplink (`true`), or the build failed for any reason (`false`). For dry runs, this value is `true` if Uplink _would have_ been updated with the result."""
  updatedGateway: Boolean!
  """Whether a new subgraph was created as part of this publish."""
  wasCreated: Boolean!
  """The URL of the Studio page for this update's associated launch, if available."""
  launchUrl: String
  """Human-readable text describing the launch result of the subgraph publish."""
  launchCliCopy: String
}

type CompositionBuildInput {
  subgraphs: [Subgraph!]!
  version: String
}

type CompositionCheckTask implements CheckWorkflowTask {
  completedAt: Timestamp
  """
  Whether the build's output supergraph core schema differs from that of the active publish for
  the workflow's variant at the time this field executed (NOT at the time the check workflow
  started).
  """
  coreSchemaModified: Boolean!
  createdAt: Timestamp!
  id: ID!
  status: CheckWorkflowTaskStatus!
  targetURL: String
  workflow: CheckWorkflow!
  """
  An old version of buildResult that returns a very old GraphQL type that generally should be
  avoided. This field will soon be deprecated.
  """
  result: CompositionResult
}

"""Composition configuration exposed to the gateway."""
type CompositionConfig {
  """The resulting API schema's SHA256 hash, represented as a hexadecimal string."""
  schemaHash: String!
}

"""The result of supergraph composition that Studio performed."""
type CompositionPublishResult implements CompositionResult {
  """The unique ID for this instance of composition."""
  graphCompositionID: ID!
  """A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."""
  errors: [SchemaCompositionError!]!
  """The supergraph SDL generated by composition."""
  supergraphSdl: GraphQLDocument
}

"""The result of supergraph composition performed by Apollo Studio, often as the result of a subgraph check or subgraph publish. See individual implementations for more details."""
interface CompositionResult {
  """The unique ID for this instance of composition."""
  graphCompositionID: ID!
  """A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."""
  errors: [SchemaCompositionError!]!
  """Supergraph SDL generated by composition."""
  supergraphSdl: GraphQLDocument
}

"""The result of composition validation run by Apollo Studio during a subgraph check."""
type CompositionCheckResult implements CompositionResult {
  """The unique ID for this instance of composition."""
  graphCompositionID: ID!
  """A list of errors that occurred during composition. Errors mean that Apollo was unable to compose the graph variant's subgraphs into a supergraph schema. If any errors are present, gateways / routers are not updated."""
  errors: [SchemaCompositionError!]!
  """The supergraph schema document generated by composition."""
  supergraphSdl: GraphQLDocument
}

type ContractVariantUpsertErrors {
  """A list of all errors that occurred when attempting to create or update a contract variant."""
  errorMessages: [String!]!
}

union ContractVariantUpsertResult = ContractVariantUpsertErrors | ContractVariantUpsertSuccess

type ContractVariantUpsertSuccess {
  """The updated contract variant"""
  contractVariant: GraphVariant!
  """Human-readable text describing the launch result of the contract update."""
  launchCliCopy: String
  """The URL of the Studio page for this update's associated launch, if available."""
  launchUrl: String
}

"""Contains the supergraph and API schemas generated by composition."""
type CoreSchema {
  """The composed API schema document."""
  apiDocument: GraphQLDocument!
  """The composed supergraph schema document."""
  coreDocument: GraphQLDocument!
  """The supergraph schema document's SHA256 hash, represented as a hexadecimal string."""
  coreHash: String!
}

union CreateOperationCollectionResult = OperationCollection | PermissionError | ValidationError

"""
Implement the DateTime<Utc> scalar

The input/output is a string in RFC3339 format.
"""
scalar DateTime @specifiedBy(url: "https://datatracker.ietf.org/doc/html/rfc3339")

union DeleteOperationCollectionResult = PermissionError

"""The result of attempting to delete a graph variant."""
type GraphVariantDeletionResult {
  """Whether the variant was deleted or not."""
  deleted: Boolean!
}

"""The result of a schema checks workflow that was run on a downstream variant as part of checks for the corresponding source variant. Most commonly, these downstream checks are [contract checks](https://www.apollographql.com/docs/studio/contracts#contract-checks)."""
type DownstreamCheckResult {
  """Whether the downstream check workflow blocks the upstream check workflow from completing."""
  blocking: Boolean!
  """The ID of the graph that the downstream variant belongs to."""
  downstreamGraphID: String!
  """The name of the downstream variant."""
  downstreamVariantName: String!
  """
  The downstream checks workflow that this result corresponds to. This value is null
  if the workflow hasn't been initialized yet, or if the downstream variant was deleted.
  """
  downstreamWorkflow: CheckWorkflow
  """
  Whether the downstream check workflow is causing the upstream check workflow to fail. This occurs
  when the downstream check workflow is both blocking and failing. This may be null while the
  downstream check workflow is pending.
  """
  failsUpstreamWorkflow: Boolean
  """The downstream checks task that this result corresponds to."""
  workflowTask: DownstreamCheckTask!
}

type DownstreamCheckTask implements CheckWorkflowTask {
  completedAt: Timestamp
  createdAt: Timestamp!
  id: ID!
  """
  A list of results for all downstream checks triggered as part of the source variant's checks workflow.
  This value is null if the task hasn't been initialized yet, or if the build task fails (the build task is a
  prerequisite to this task). This value is _not_ null _while_ the task is running. The returned list is empty
  if the source variant has no downstream variants.
  """
  results: [DownstreamCheckResult!]
  status: CheckWorkflowTaskStatus!
  targetURL: String
  workflow: CheckWorkflow!
}

interface Error {
  message: String!
}

"""A single subgraph in a supergraph. Every supergraph managed by Apollo Studio includes at least one subgraph. See https://www.apollographql.com/docs/federation/managed-federation/overview/ for more information."""
type GraphVariantSubgraph {
  """The subgraph's name."""
  name: String!
  """The URL of the subgraph's GraphQL endpoint."""
  url: String
  """The current user-provided version/edition of the subgraph. Typically a Git SHA or docker image ID."""
  revision: String!
  """The ID of the graph this subgraph belongs to."""
  graphID: String!
  """The name of the graph variant this subgraph belongs to."""
  graphVariant: String!
  """The subgraph's current active schema, used in supergraph composition for the the associated variant."""
  activePartialSchema: SubgraphSchema!
  """The timestamp when the subgraph was created."""
  createdAt: Timestamp!
  """The timestamp when the subgraph was most recently updated."""
  updatedAt: Timestamp!
}

"""Container for a list of subgraphs composing a supergraph."""
type GraphVariantSubgraphs {
  """The list of underlying subgraphs."""
  services: [GraphVariantSubgraph!]!
}

"""Counts of changes at the field level, including objects, interfaces, and input fields."""
type FieldChangeSummaryCounts {
  """Number of changes that are additions of fields to object, interface, and input types."""
  additions: Int!
  """Number of changes that are removals of fields from object, interface, and input types."""
  removals: Int!
  """
  Number of changes that are field edits. This includes fields changing type and any field
  deprecation and description changes, but also includes any argument changes and any input object
  field changes.
  """
  edits: Int!
}

"""Inputs provided to the build for a contract variant, which filters types and fields from a source variant's schema."""
type FilterBuildInput {
  """Schema filtering rules for the build, such as tags to include or exclude from the source variant schema."""
  filterConfig: FilterConfig!
  """The source variant schema document's SHA256 hash, represented as a hexadecimal string."""
  schemaHash: String!
}

type FilterCheckTask implements CheckWorkflowTask {
  completedAt: Timestamp
  createdAt: Timestamp!
  id: ID!
  status: CheckWorkflowTaskStatus!
  targetURL: String
  workflow: CheckWorkflow!
}

"""The filter configuration used to build a contract schema. The configuration consists of lists of tags for schema elements to include or exclude in the resulting schema."""
type FilterConfig {
  """Tags of schema elements to exclude from the contract schema."""
  exclude: [String!]!
  """Tags of schema elements to include in the contract schema."""
  include: [String!]!
}

input FilterConfigInput {
  """A list of tags for schema elements to exclude from the resulting contract schema."""
  exclude: [String!]!
  """
  Whether to hide unreachable objects, interfaces, unions, inputs, enums and scalars from
  the resulting contract schema. Defaults to `false`.
  """
  hideUnreachableTypes: Boolean! = false
  """A list of tags for schema elements to include in the resulting contract schema."""
  include: [String!]!
}

type GitContext {
  commit: ID
}

"""Input type to provide when specifying the Git context for a run of schema checks."""
input GitContextInput {
  """The Git repository branch used in the check."""
  branch: String
  """The ID of the Git commit used in the check."""
  commit: ID
  """The username of the user who created the Git commit used in the check."""
  committer: String
  """The commit message of the Git commit used in the check."""
  message: String
  """The Git repository's remote URL."""
  remoteUrl: String
}

"""
Represents a graph API key, which has permissions scoped to a
user role for a single Apollo graph.
"""
type GraphApiKey implements ApiKey {
  """The timestamp when the API key was created."""
  createdAt: Timestamp!
  """Details of the user or graph that created the API key."""
  createdBy: Identity
  """The API key's ID."""
  id: ID!
  """The API key's name, for distinguishing it from other keys."""
  keyName: String
  """The permission level assigned to the API key upon creation."""
  role: UserPermission!
  """The value of the API key. **This is a secret credential!**"""
  token: String!
}

"""A union of all containers that can comprise the components of a Studio graph"""
union GraphImplementors = GraphVariantSubgraphs

"""A GraphQL document, such as the definition of an operation or schema."""
scalar GraphQLDocument

"""A graph variant"""
type GraphVariant {
  """The variant's global identifier in the form `graphID@variant`."""
  id: ID!
  router: Router
  """The filter configuration used to build a contract schema. The configuration consists of lists of tags for schema elements to include or exclude in the resulting schema."""
  contractFilterConfig: FilterConfig
  """
  A human-readable description of the filter configuration of this contract variant, or null if this isn't a contract
  variant.
  """
  contractFilterConfigDescription: String
  """The graph that this variant belongs to."""
  graph: Graph!
  """Latest approved launch for the variant, and what is served through Uplink."""
  latestApprovedLaunch: Launch
  """Latest launch for the variant, whether successful or not."""
  latestLaunch: Launch
  """The variant's name (e.g., `staging`)."""
  name: String!
  """Which permissions the current user has for interacting with this variant"""
  permissions: GraphVariantPermissions!
  readme: Readme!
  """The variant this variant is derived from. This property currently only exists on contract variants."""
  sourceVariant: GraphVariant
  """A list of the saved [operation collections](https://www.apollographql.com/docs/studio/explorer/operation-collections/) associated with this variant."""
  operationCollections: [OperationCollection!]!
  """The URL of the variant's GraphQL endpoint for query and mutation operations. For subscription operations, use `subscriptionUrl`."""
  url: String
  """The URL of the variant's GraphQL endpoint for subscription operations."""
  subscriptionUrl: String
  """The details of the variant's most recent publication."""
  latestPublication: SchemaPublication
  """A list of the subgraphs included in this variant. This value is null for non-federated variants. Set `includeDeleted` to `true` to include deleted subgraphs."""
  subgraphs(includeDeleted: Boolean! = false): [GraphVariantSubgraph!]
  """Returns the details of the subgraph with the provided `name`, or null if this variant doesn't include a subgraph with that name."""
  subgraph(name: ID!): GraphVariantSubgraph
}

"""Result of looking up a variant by ref"""
union GraphVariantLookup = GraphVariant | InvalidRefFormat

"""Modifies a variant of a graph, also called a schema tag in parts of our product."""
type GraphVariantMutation {
  """
  _Asynchronously_ kicks off operation checks for a proposed non-federated
  schema change against its associated graph.

  Returns a `CheckRequestSuccess` object with a workflow ID that you can use
  to check status, or an error object if the checks workflow failed to start.
  """
  submitCheckSchemaAsync(input: CheckSchemaAsyncInput!): CheckRequestResult!
  """
  _Asynchronously_ kicks off composition and operation checks for a proposed subgraph schema change against its associated supergraph.

  Returns a `CheckRequestSuccess` object with a workflow ID that you can use
  to check status, or an error object if the checks workflow failed to start.
  """
  submitSubgraphCheckAsync(input: SubgraphCheckAsyncInput!): CheckRequestResult!
  """Updates the [README](https://www.apollographql.com/docs/studio/org/graphs/#the-readme-page) of this variant."""
  updateVariantReadme(
    """The full new text of the README, as a Markdown-formatted string."""
    readme: String!
  ): GraphVariant
  """Delete the variant."""
  delete: GraphVariantDeletionResult!
}

"""Individual permissions for the current user when interacting with a particular Studio graph variant."""
type GraphVariantPermissions {
  """Whether the currently authenticated user is permitted to manage/update this variant's build configuration (e.g., build pipeline version)."""
  canManageBuildConfig: Boolean!
  """Whether the currently authenticated user is permitted to manage/update cloud routers"""
  canManageCloudRouter: Boolean!
  """Whether the currently authenticated user is permitted to update variant-level settings for the Apollo Studio Explorer."""
  canManageExplorerSettings: Boolean!
  """Whether the currently authenticated user is permitted to publish schemas to this variant."""
  canPushSchemas: Boolean!
  """Whether the currently authenticated user is permitted to view this variant's build configuration details (e.g., build pipeline version)."""
  canQueryBuildConfig: Boolean!
  """Whether the currently authenticated user is permitted to view details regarding cloud routers"""
  canQueryCloudRouter: Boolean!
  """Whether the currently authenticated user is permitted to view cloud router logs"""
  canQueryCloudRouterLogs: Boolean!
  """Whether the currently authenticated user is permitted to download schemas associated to this variant."""
  canQuerySchemas: Boolean!
  """Whether the currently authenticated user is permitted to update the README for this variant."""
  canUpdateVariantReadme: Boolean!
  canCreateCollectionInVariant: Boolean!
  canShareCollectionInVariant: Boolean!
}

input HistoricQueryParameters {
  from: String = "-86400"
  to: String = "0"
  """Minimum number of requests within the window for a query to be considered."""
  queryCountThreshold: Int = 1
  """
  Number of requests within the window for a query to be considered, relative to
  total request count. Expected values are between 0 and 0.05 (minimum 5% of total
  request volume)
  """
  queryCountThresholdPercentage: Float = 0
  """A list of operation IDs to filter out during validation."""
  ignoredOperations: [ID!] = null
  """A list of clients to filter out during validation."""
  excludedClients: [ClientInfoFilter!] = null
  """A list of operation names to filter out during validation."""
  excludedOperationNames: [OperationNameFilterInput!] = null
  """
  A list of variants to include in the validation. If no variants are provided
  then this defaults to the "current" variant along with the base variant. The
  base variant indicates the schema that generates diff and marks the metrics that
  are checked for broken queries. We union this base variant with the untagged values('',
  same as null inside of `in`, and 'current') in this metrics fetch. This strategy
  supports users who have not tagged their metrics or schema.
  """
  includedVariants: [String!] = null
}

"""Input type to provide when specifying configuration details for schema checks."""
input HistoricQueryParametersInput {
  """Clients to be excluded from check."""
  excludedClients: [ClientInfoFilter!]
  """Operations to be ignored in this schema check, specified by operation name."""
  excludedOperationNames: [OperationNameFilterInput!]
  """Start time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted."""
  from: String
  """Operations to be ignored in this schema check, specified by ID."""
  ignoredOperations: [ID!]
  """Graph variants to be included in check."""
  includedVariants: [String!]
  """Maximum number of queries to be checked against the change."""
  queryCountThreshold: Int
  """Only fail check if this percentage of operations would be negatively impacted."""
  queryCountThresholdPercentage: Float
  """End time for operations to be checked against. Specified as either a) an ISO formatted date/time string or b) a negative number of seconds relative to the time the check request was submitted."""
  to: String
}

"""An identity (such as a `User` or `Graph`) in Apollo Studio. See implementing types for details."""
interface Identity {
  """Returns a representation of the identity as an `Actor` type."""
  asActor: Actor!
  """The identity's identifier, which is unique among objects of its type."""
  id: ID!
  """The identity's human-readable name."""
  name: String!
}

type InternalIdentity implements Identity {
  accounts: [Organization!]!
  asActor: Actor!
  email: String
  id: ID!
  name: String!
}

input IntrospectionDirectiveInput {
  name: String!
  description: String
  locations: [IntrospectionDirectiveLocation!]!
  args: [IntrospectionInputValueInput!]!
  isRepeatable: Boolean
}

"""__DirectiveLocation introspection type"""
enum IntrospectionDirectiveLocation {
  """Location adjacent to a query operation."""
  QUERY
  """Location adjacent to a mutation operation."""
  MUTATION
  """Location adjacent to a subscription operation."""
  SUBSCRIPTION
  """Location adjacent to a field."""
  FIELD
  """Location adjacent to a fragment definition."""
  FRAGMENT_DEFINITION
  """Location adjacent to a fragment spread."""
  FRAGMENT_SPREAD
  """Location adjacent to an inline fragment."""
  INLINE_FRAGMENT
  """Location adjacent to a variable definition."""
  VARIABLE_DEFINITION
  """Location adjacent to a schema definition."""
  SCHEMA
  """Location adjacent to a scalar definition."""
  SCALAR
  """Location adjacent to an object type definition."""
  OBJECT
  """Location adjacent to a field definition."""
  FIELD_DEFINITION
  """Location adjacent to an argument definition."""
  ARGUMENT_DEFINITION
  """Location adjacent to an interface definition."""
  INTERFACE
  """Location adjacent to a union definition."""
  UNION
  """Location adjacent to an enum definition."""
  ENUM
  """Location adjacent to an enum value definition."""
  ENUM_VALUE
  """Location adjacent to an input object type definition."""
  INPUT_OBJECT
  """Location adjacent to an input object field definition."""
  INPUT_FIELD_DEFINITION
}

"""__EnumValue introspection type"""
input IntrospectionEnumValueInput {
  name: String!
  description: String
  isDeprecated: Boolean!
  deprecationReason: String
}

"""__Field introspection type"""
input IntrospectionFieldInput {
  name: String!
  description: String
  args: [IntrospectionInputValueInput!]!
  type: IntrospectionTypeInput!
  isDeprecated: Boolean!
  deprecationReason: String
}

"""__Value introspection type"""
input IntrospectionInputValueInput {
  name: String!
  description: String
  type: IntrospectionTypeInput!
  defaultValue: String
  isDeprecated: Boolean
  deprecationReason: String
}

"""__Schema introspection type"""
input IntrospectionSchemaInput {
  types: [IntrospectionTypeInput!]
  queryType: IntrospectionTypeRefInput!
  mutationType: IntrospectionTypeRefInput
  subscriptionType: IntrospectionTypeRefInput
  directives: [IntrospectionDirectiveInput!]!
  description: String
}

"""__Type introspection type"""
input IntrospectionTypeInput {
  kind: IntrospectionTypeKind!
  name: String
  description: String
  specifiedByUrl: String
  fields: [IntrospectionFieldInput!]
  interfaces: [IntrospectionTypeInput!]
  possibleTypes: [IntrospectionTypeInput!]
  enumValues: [IntrospectionEnumValueInput!]
  inputFields: [IntrospectionInputValueInput!]
  ofType: IntrospectionTypeInput
}

enum IntrospectionTypeKind {
  """Indicates this type is a scalar."""
  SCALAR
  """Indicates this type is an object. 'fields' and 'interfaces' are valid fields."""
  OBJECT
  """
  Indicates this type is an interface. 'fields' and 'possibleTypes' are valid
  fields
  """
  INTERFACE
  """Indicates this type is a union. 'possibleTypes' is a valid field."""
  UNION
  """Indicates this type is an enum. 'enumValues' is a valid field."""
  ENUM
  """Indicates this type is an input object. 'inputFields' is a valid field."""
  INPUT_OBJECT
  """Indicates this type is a list. 'ofType' is a valid field."""
  LIST
  """Indicates this type is a non-null. 'ofType' is a valid field."""
  NON_NULL
}

"""Shallow __Type introspection type"""
input IntrospectionTypeRefInput {
  name: String!
  kind: String
}

"""An error caused by providing invalid input for a task, such as schema checks."""
type InvalidInputError {
  """The error message."""
  message: String!
}

"""This object is returned when a request to fetch a Studio graph variant provides an invalid graph ref."""
type InvalidRefFormat implements Error {
  message: String!
}

"""Represents the complete process of making a set of updates to a deployed graph variant."""
type Launch {
  """The unique identifier for this launch."""
  id: ID!
  """The ID of the launch's associated graph."""
  graphId: String!
  """The name of the launch's associated variant."""
  graphVariant: String!
  order: OrderOrError!
  """The timestamp when the launch was approved."""
  approvedAt: Timestamp
  """The associated build for this launch (a build includes schema composition and contract filtering). This value is null until the build is initiated."""
  build: Build
  """The inputs provided to this launch's associated build, including subgraph schemas and contract filters."""
  buildInput: BuildInput!
  """The timestamp when the launch completed. This value is null until the launch completes."""
  completedAt: Timestamp
  """The timestamp when the launch was initiated."""
  createdAt: Timestamp!
  """Contract launches that were triggered by this launch."""
  downstreamLaunches: [Launch!]!
  """Whether the launch completed."""
  isCompleted: Boolean
  """Whether the result of the launch has been published to the associated graph and variant. This is always false for a failed launch."""
  isPublished: Boolean
  """The most recent launch sequence step that has started but not necessarily completed."""
  latestSequenceStep: LaunchSequenceStep
  """A specific publication of a graph variant pertaining to this launch."""
  publication: SchemaPublication
  """A list of results from the completed launch. The items included in this list vary depending on whether the launch succeeded, failed, or was superseded."""
  results: [LaunchResult!]!
  """Cloud router configuration associated with this build event. It will be non-null for any cloud-router variant, and null for any not cloudy variant/graph."""
  routerConfig: String
  """A list of all serial steps in the launch sequence. This list can change as the launch progresses. For example, a `LaunchCompletedStep` is appended after a launch completes."""
  sequence: [LaunchSequenceStep!]!
  """A shortened version of `Launch.id` that includes only the first 8 characters."""
  shortenedID: String!
  """The launch's status. If a launch is superseded, its status remains `LAUNCH_INITIATED`. To check for a superseded launch, use `supersededAt`."""
  status: LaunchStatus!
  """A list of subgraph changes that are included in this launch."""
  subgraphChanges: [SubgraphChange!]
  """The timestamp when this launch was superseded by another launch. If an active launch is superseded, it terminates."""
  supersededAt: Timestamp
  """The launch that superseded this launch, if any. If an active launch is superseded, it terminates."""
  supersededBy: Launch
  """The source variant launch that caused this launch to be initiated. This value is present only for contract variant launches. Otherwise, it's null."""
  upstreamLaunch: Launch
}

"""Types of results that can be associated with a `Launch`"""
union LaunchResult = ChangelogLaunchResult

"""The timing details for the build step of a launch."""
type LaunchSequenceBuildStep {
  """The timestamp when the step completed."""
  completedAt: Timestamp
  """The timestamp when the step started."""
  startedAt: Timestamp
}

"""The timing details for the checks step of a launch."""
type LaunchSequenceCheckStep {
  """The timestamp when the step completed."""
  completedAt: Timestamp
  """The timestamp when the step started."""
  startedAt: Timestamp
}

"""The timing details for the completion step of a launch."""
type LaunchSequenceCompletedStep {
  """The timestamp when the step (and therefore the launch) completed."""
  completedAt: Timestamp
}

"""The timing details for the initiation step of a launch."""
type LaunchSequenceInitiatedStep {
  """The timestamp when the step (and therefore the launch) started."""
  startedAt: Timestamp
}

"""The timing details for the publish step of a launch."""
type LaunchSequencePublishStep {
  """The timestamp when the step completed."""
  completedAt: Timestamp
  """The timestamp when the step started."""
  startedAt: Timestamp
}

"""Represents the various steps that occur in sequence during a single launch."""
union LaunchSequenceStep = LaunchSequenceBuildStep | LaunchSequenceCheckStep | LaunchSequenceCompletedStep | LaunchSequenceInitiatedStep | LaunchSequencePublishStep | LaunchSequenceSupersededStep

"""The timing details for the superseded step of a launch. This step occurs only if the launch is superseded by another launch."""
type LaunchSequenceSupersededStep {
  """The timestamp when the step completed, thereby ending the execution of this launch in favor of the superseding launch."""
  completedAt: Timestamp
}

enum LaunchStatus {
  LAUNCH_COMPLETED
  LAUNCH_FAILED
  LAUNCH_INITIATED
}

enum LogLevel {
  WARN
  INFO
  ERROR
  DEBUG
}

type LogMessage {
  """Timestamp in UTC"""
  timestamp: DateTime!
  """Log message contents"""
  message: String!
  """Log level"""
  level: LogLevel!
}

type Mutation {
  """Provides access to mutation fields for modifying a Studio graph with the provided ID."""
  graph(id: ID!): GraphMutation
  """
  Provides access to mutation fields for modifying an Apollo user with the
  provided ID.
  """
  user(id: ID!): UserMutation
  """Creates an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for a given variant, or creates a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections) without an associated variant."""
  createOperationCollection(
    """The collection's description."""
    description: String
    """Whether the collection is a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections)."""
    isSandbox: Boolean!
    """Whether the collection is shared across its associated organization."""
    isShared: Boolean!
    """The minimum role a user needs to edit this collection. Valid values: null, CONSUMER, OBSERVER, DOCUMENTER, CONTRIBUTOR, GRAPH_ADMIN. This value is ignored if `isShared` is `false`. The default value is  `GRAPH_ADMIN`."""
    minEditRole: UserPermission
    """The collection's name."""
    name: String!
    """The [graph ref](https://www.apollographql.com/docs/rover/conventions/#graph-refs) of the graph variants to associate the collection with."""
    variantRefs: [ID!]
  ): CreateOperationCollectionResult!
  operationCollection(id: ID!): OperationCollectionMutation
}

"""
ISO 8601 combined date and time without timezone.

# Examples

* `2015-07-01T08:59:60.123`,
"""
scalar NaiveDateTime

type NamedIntrospectionArg {
  name: String
  description: String
}

"""
The shared fields for a named introspection type. Currently this is returned for the
top level value affected by a change. In the future, we may update this
type to be an interface, which is extended by the more specific types:
scalar, object, input object, union, interface, and enum

For an in-depth look at where these types come from, see:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/659eb50d3/types/graphql/utilities/introspectionQuery.d.ts#L31-L37
"""
type NamedIntrospectionType {
  kind: IntrospectionTypeKind
  name: String
  description: String
}

"""
Introspection values that can be children of other types for changes, such
as input fields, objects in interfaces, enum values. In the future, this
value could become an interface to allow fields specific to the types
returned.
"""
type NamedIntrospectionValue {
  name: String
  description: String
  printedType: String
}

"""An error that occurs when a requested object is not found."""
type NotFoundError implements Error {
  """The error message."""
  message: String!
}

"""A list of saved GraphQL operations."""
type OperationCollection {
  """The timestamp when the collection was created."""
  createdAt: Timestamp!
  """The user or other entity that created the collection."""
  createdBy: Identity
  """The collection's description. A `null` description was never set, and empty string description was set to be empty string by a user, or other entity."""
  description: String
  id: ID!
  """Whether the current user has marked the collection as a favorite."""
  isFavorite: Boolean!
  """Whether the collection is a [sandbox collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/#sandbox-collections)."""
  isSandbox: Boolean!
  """Whether the collection is shared across its associated organization."""
  isShared: Boolean!
  """The timestamp when the collection was most recently updated."""
  lastUpdatedAt: Timestamp!
  """The user or other entity that most recently updated the collection."""
  lastUpdatedBy: Identity
  """The minimum role a user needs to edit this collection. Valid values: null, CONSUMER, OBSERVER, DOCUMENTER, CONTRIBUTOR, GRAPH_ADMIN. This value is always `null` if `isShared` is `false`. If `null` when `isShared` is `true`, the minimum role is `GRAPH_ADMIN`."""
  minEditRole: UserPermission
  """The collection's name."""
  name: String!
  """Returns the operation in the collection with the specified ID, if any."""
  operation(id: ID!): OperationCollectionEntryResult
  """A list of the GraphQL operations that belong to the collection."""
  operations: [OperationCollectionEntry!]!
  """The permissions that the current user has for the collection."""
  permissions: OperationCollectionPermissions!
}

"""A saved operation entry within an Operation Collection."""
type OperationCollectionEntry {
  """The timestamp when the entry was created."""
  createdAt: Timestamp!
  """The user or other entity that created the entry."""
  createdBy: Identity
  """Details of the entry's associated operation, such as its `body` and `variables`."""
  currentOperationRevision: OperationCollectionEntryState!
  id: ID!
  """The timestamp when the entry was most recently updated."""
  lastUpdatedAt: Timestamp!
  """The user or other entity that most recently updated the entry."""
  lastUpdatedBy: Identity
  """The entry's name."""
  name: String!
  """The entry's lexicographical ordering index within its containing collection."""
  orderingIndex: String!
}

"""Provides fields for modifying an operation in a collection."""
type OperationCollectionEntryMutation {
  """Updates the name of an operation."""
  updateName(name: String!): UpdateOperationCollectionEntryResult
  """Updates the body, headers, and/or variables of an operation."""
  updateValues(operationInput: OperationCollectionEntryStateInput!): UpdateOperationCollectionEntryResult
}

union OperationCollectionEntryMutationResult = NotFoundError | OperationCollectionEntryMutation | PermissionError

"""Possible return values when querying for an entry in an operation collection (either the entry object or an `Error` object)."""
union OperationCollectionEntryResult = NotFoundError | OperationCollectionEntry

"""The most recent body, variable and header values of a saved operation entry."""
type OperationCollectionEntryState {
  """The raw body of the entry's GraphQL operation."""
  body: String!
  """Headers for the entry's GraphQL operation."""
  headers: [OperationHeader!]
  """Variables for the entry's GraphQL operation, as a JSON string."""
  variables: String
}

"""Fields for creating or modifying an operation collection entry."""
input OperationCollectionEntryStateInput {
  """The operation's query body."""
  body: String!
  """The operation's headers."""
  headers: [OperationHeaderInput!]
  """The operation's variables."""
  variables: String
}

"""Provides fields for modifying an [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/)."""
type OperationCollectionMutation {
  """Adds an operation to this collection."""
  addOperation(name: String!, operationInput: OperationCollectionEntryStateInput!): AddOperationCollectionEntryResult
  """Adds operations to this collection."""
  addOperations(operations: [AddOperationInput!]!): AddOperationCollectionEntriesResult
  """Deletes this operation collection. This also deletes all of the collection's associated operations."""
  delete: DeleteOperationCollectionResult
  """Deletes an operation from this collection."""
  deleteOperation(id: ID!): RemoveOperationCollectionEntryResult
  operation(id: ID!): OperationCollectionEntryMutationResult
  """Updates the minimum role a user needs to be able to modify this collection."""
  setMinEditRole(editRole: UserPermission): UpdateOperationCollectionResult
  """Updates this collection's description."""
  updateDescription(description: String): UpdateOperationCollectionResult
  """Updates whether the current user has marked this collection as a favorite."""
  updateIsFavorite(isFavorite: Boolean!): UpdateOperationCollectionResult
  """Updates whether this collection is shared across its associated organization."""
  updateIsShared(isShared: Boolean!): UpdateOperationCollectionResult
  """Updates this operation collection's name."""
  updateName(name: String!): UpdateOperationCollectionResult
}

"""Whether the current user can perform various actions on the associated collection."""
type OperationCollectionPermissions {
  """Whether the current user can edit operations in the associated collection."""
  canEditOperations: Boolean!
  """Whether the current user can delete or update the associated collection's metadata, such as its name and description."""
  canManage: Boolean!
  """Whether the current user can read operations in the associated collection."""
  canReadOperations: Boolean!
}

union OperationCollectionResult = NotFoundError | OperationCollection | PermissionError | ValidationError

"""Saved headers on a saved operation."""
type OperationHeader {
  """The header's name."""
  name: String!
  """The header's value."""
  value: String!
}

input OperationHeaderInput {
  """The header's name."""
  name: String!
  """The header's value."""
  value: String!
}

"""Options to filter by operation name."""
input OperationNameFilterInput {
  """name of the operation set by the user and reported alongside metrics"""
  name: String!
  version: String
}

type OperationsCheckResult {
  id: ID!
  """Indication of the success of the change, either failure, warning, or notice."""
  checkSeverity: ChangeSeverity!
  """Number of operations that were validated during schema diff"""
  numberOfCheckedOperations: Int!
  """List of schema changes with associated affected clients and operations"""
  changes: [Change!]!
  """Summary/counts for all changes in diff"""
  changeSummary: ChangeSummary!
  """Operations affected by all changes in diff"""
  affectedQueries: [AffectedQuery!]
  """Number of affected query operations that are neither marked as SAFE or IGNORED"""
  numberOfAffectedOperations: Int!
  createdAt: Timestamp!
}

type OperationsCheckTask implements CheckWorkflowTask {
  completedAt: Timestamp
  createdAt: Timestamp!
  id: ID!
  status: CheckWorkflowTaskStatus!
  targetURL: String
  workflow: CheckWorkflow!
  """
  The result of the operations check. This will be null when the task is initializing or running,
  or when the build task fails (which is a prerequisite task to this one).
  """
  result: OperationsCheckResult
}

type Order {
  id: ID!
  orderType: OrderType!
  status: OrderStatus!
  reason: String
  logs(first: Int, offset: Int): [LogMessage!]!
  router: Router!
}

union OrderOrError = Order

enum OrderStatus {
  PENDING
  COMPLETED
  ROLLING_BACK
  ERRORED
  SUPERSEDED
}

enum OrderType {
  CREATE_ROUTER
  DESTROY_ROUTER
  UPDATE_ROUTER
}

"""The schema for a single published subgraph in Studio."""
type SubgraphSchema {
  """The subgraph schema document as SDL."""
  sdl: String!
}

"""
Input for registering a partial schema to an implementing service.
One of the fields must be specified (validated server-side).

If a new partialSchemaSDL is passed in, this operation will store it before
creating the association.

If both the sdl and hash are specified, an error will be thrown if the provided
hash doesn't match our hash of the sdl contents. If the sdl field is specified,
the hash does not need to be and will be computed server-side.
"""
input PartialSchemaInput {
  """
  Contents of the partial schema in SDL syntax, but may reference types
  that aren't defined in this document
  """
  sdl: String
  """
  Hash of the partial schema to associate; error is thrown if only the hash is
  specified and the hash has not been seen before
  """
  hash: String
}

"""An error that occurs when the current user doesn't have sufficient permissions to perform an action."""
type PermissionError implements Error {
  """The error message."""
  message: String!
}

"""An error related to an organization's Apollo Studio plan."""
type PlanError {
  """The error message."""
  message: String!
}

type Query {
  """Returns the root URL of the Apollo Studio frontend."""
  frontendUrlRoot: String!
  """Returns details of the graph with the provided ID."""
  graph(id: ID!): Graph
  """Returns details of the authenticated `User` or `Graph` executing this query. If this is an unauthenticated query (i.e., no API key is provided), this field returns null."""
  me: Identity
  """Returns details of the Studio organization with the provided ID."""
  organization(id: ID!): Organization
  """Returns details of the Apollo user with the provided ID."""
  user(id: ID!): User
  """Returns details of a Studio graph variant with the provided graph ref. A graph ref has the format `graphID@variantName` (or just `graphID` for the default variant `current`). Returns null if the graph or variant doesn't exist, or if the graph isn't accessible by the current actor."""
  variant(ref: ID!): GraphVariantLookup
  """Returns the [operation collection](https://www.apollographql.com/docs/studio/explorer/operation-collections/) for the provided ID."""
  operationCollection(id: ID!): OperationCollectionResult!
}

"""The README documentation for a graph variant, which is displayed in Studio."""
type Readme {
  """The contents of the README in plaintext."""
  content: String!
  """The README's unique ID. `a15177c0-b003-4837-952a-dbfe76062eb1` for the default README"""
  id: ID!
  """The actor that most recently updated the README (usually a `User`). `null` for the default README, or if the `User` was deleted."""
  lastUpdatedBy: Identity
  """The timestamp when the README was most recently updated. `null` for the default README"""
  lastUpdatedTime: Timestamp
}

union RemoveOperationCollectionEntryResult = OperationCollection | PermissionError

type Router {
  """
  Last time when the Cloud Router was updated

  If the Cloud Router was never updated, this value will be null
  """
  updatedAt: NaiveDateTime
  """Current status of the Cloud Router"""
  status: RouterStatus!
  """Current version of the Cloud Router"""
  routerVersion: RouterVersion!
  """
  URL where the Cloud Router can be found

  This will be null if the Cloud Router is in a deleted status
  """
  routerUrl: String
  """Retrieves a specific Order related to this Cloud Router"""
  order(orderId: ID!): Order
  """Retrieves all Orders related to this Cloud Router"""
  orders(first: Int, offset: Int): [Order!]!
  """Return the list of secrets for this Cloud Router with their hash values"""
  secrets: [Secret!]!
}

enum RouterStatus {
  CREATING
  UPDATING
  DELETING
  ROLLING_BACK
  RUNNING
  DELETED
}

type RouterVersion {
  version: String!
  core: String!
  build: String!
  status: Status!
  configVersion: String!
  configSchema: String!
}

"""A GraphQL schema document and associated metadata."""
type Schema {
  """The GraphQL schema document's SHA256 hash, represented as a hexadecimal string."""
  hash: ID!
  """The GraphQL schema document."""
  document: GraphQLDocument!
}

"""An error that occurred while running schema composition on a set of subgraph schemas."""
type SchemaCompositionError {
  """A human-readable message describing the error."""
  message: String!
  """Source locations related to the error."""
  locations: [SourceLocation]!
  """A machine-readable error code."""
  code: String
}

"""The result of computing the difference between two schemas, usually as part of schema checks."""
type SchemaDiff {
  """Indicates the overall safety of the changes included in the diff, based on operation history (e.g., `FAILURE` or `NOTICE`)."""
  severity: ChangeSeverity!
  """A list of all schema changes in the diff, including their severity."""
  changes: [Change!]!
  """Numeric summaries for each type of change in the diff."""
  changeSummary: ChangeSummary!
  """Operations affected by all changes in the diff."""
  affectedQueries: [AffectedQuery!]
  """The number of GraphQL operations that were validated during the check."""
  numberOfCheckedOperations: Int
  """The number of GraphQL operations affected by the diff's changes that are neither marked as safe nor ignored."""
  numberOfAffectedOperations: Int!
}

"""Contains details for an individual publication of an individual graph variant."""
type SchemaPublication {
  """
  The variant that was published to."
  """
  variant: GraphVariant!
  """The schema that was published to the variant."""
  schema: Schema!
  """The result of federated composition executed for this publication. This result includes either a supergraph schema or error details, depending on whether composition succeeded. This value is null when the publication is for a non-federated graph."""
  compositionResult: CompositionResult
  """The timestamp when the variant was published to."""
  publishedAt: Timestamp!
  """A schema diff comparing against the schema from the most recent previous successful publication."""
  diffToPrevious: SchemaDiff
}

type Secret {
  createdAt: DateTime!
  name: String!
  hash: String!
}

type SemanticChange {
  """Semantic metadata about the type of change"""
  definition: ChangeDefinition!
  """Top level node affected by the change"""
  parentNode: NamedIntrospectionType
  """
  Node related to the top level node that was changed, such as a field in an object,
  a value in an enum or the object of an interface
  """
  childNode: NamedIntrospectionValue
  """Target arg of change made."""
  argNode: NamedIntrospectionArg
}

"""
A graph in Apollo Studio represents a graph in your organization.
Each graph has one or more variants, which correspond to the different environments where that graph runs (such as staging and production).
Each variant has its own GraphQL schema, which means schemas can differ between environments.
"""
type Graph implements Identity {
  """The organization that this graph belongs to."""
  account: Organization
  """A list of the graph API keys that are active for this graph."""
  apiKeys: [GraphApiKey!]
  """Provides a view of the graph as an `Actor` type."""
  asActor: Actor!
  """Get a check workflow for this graph by its ID"""
  checkWorkflow(id: ID!): CheckWorkflow
  """The graph's globally unique identifier."""
  id: ID!
  """Permissions of the current user in this graph."""
  myRole: UserPermission
  name: String!
  """Describes the permissions that the active user has for this graph."""
  roles: GraphRoles
  """The graph's name."""
  title: String!
  """
  Provides details of the graph variant with the provided `name`, if a variant
  with that name exists for this graph. Otherwise, returns null.

   For a list of _all_ variants associated with a graph, use `Graph.variants` instead.
  """
  variant(name: String!): GraphVariant
  """A list of the variants for this graph."""
  variants: [GraphVariant!]!
  """Get a GraphQL document by hash"""
  document(hash: SHA256): GraphQLDocument
  """Get check workflows for this graph ordered by creation time, most recent first."""
  checkWorkflows(limit: Int! = 100, filter: CheckFilterInput): [CheckWorkflow!]!
}

"""Provides access to mutation fields for managing Studio graphs and subgraphs."""
type GraphMutation {
  """Generates a new graph API key for this graph with the specified permission level."""
  newKey(keyName: String, role: UserPermission! = GRAPH_ADMIN): GraphApiKey!
  """Deletes the existing graph API key with the provided ID, if any."""
  removeKey(
    """API key ID"""
    id: ID!
  ): Void
  """Sets a new name for the graph API key with the provided ID, if any. This does not invalidate the key or change its value."""
  renameKey(id: ID!, newKeyName: String): GraphApiKey
  """Creates a contract schema from a source variant and a set of filter configurations"""
  upsertContractVariant(
    """The name of the contract variant, e.g. `public-api`. Once set, this value cannot be changed."""
    contractVariantName: String!
    """The filter configuration used to build a contract schema. The configuration consists of lists of tags for schema elements to include or exclude in the resulting schema."""
    filterConfig: FilterConfigInput!
    """Whether a launch and schema publish should be initiated after updating configuration. Defaults to `true`."""
    initiateLaunch: Boolean! = true
    """The graphRef of the variant the contract will be derived from, e.g. `my-graph@production`. Once set, this value cannot be changed."""
    sourceVariant: String
  ): ContractVariantUpsertResult!
  """Make changes to a graph variant."""
  variant(name: String!): GraphVariantMutation
  """Publish a schema to this variant, either via a document or an introspection query result."""
  uploadSchema(schema: IntrospectionSchemaInput, schemaDocument: String, tag: String!, historicParameters: HistoricQueryParameters, overrideComposedSchema: Boolean! = false, errorOnBadRequest: Boolean! = true, gitContext: GitContextInput): SchemaPublicationResult
  """
  Checks a proposed schema against the schema that has been published to
  a particular variant, using metrics corresponding to `historicParameters`.
  Callers can set `historicParameters` directly or rely on defaults set in the
  graph's check configuration (7 days by default).
  If they do not set `historicParameters` but set `useMaximumRetention`,
  validation will use the maximum retention the graph has access to.
  """
  checkSchema(
    """
    Only one of proposedSchema, proposedSchemaDocument, and proposedSchemaHash
    may be specified
    """
    proposedSchema: IntrospectionSchemaInput
    proposedSchemaDocument: String
    proposedSchemaHash: String
    baseSchemaTag: String = "current"
    gitContext: GitContextInput
    historicParameters: HistoricQueryParameters
    useMaximumRetention: Boolean
    isSandboxCheck: Boolean! = false
    """If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served."""
    introspectionEndpoint: String
    """Deprecated and ignored."""
    frontend: String
  ): CheckSchemaResult!
  """Publish to a subgraph. If composition is successful, this will update running routers."""
  publishSubgraph(graphVariant: String!, name: String!, url: String, revision: String!, activePartialSchema: PartialSchemaInput!, gitContext: GitContextInput): SubgraphPublicationResult
  """Removes a subgraph. If composition is successful, this will update running routers."""
  removeImplementingServiceAndTriggerComposition(
    graphVariant: String!
    name: String!
    """Do not remove the service, but recompose without it and report any errors."""
    dryRun: Boolean! = false
  ): SubgraphRemovalResult!
  """
  Checks a proposed subgraph schema change against a published subgraph.
  If the proposal composes successfully, perform a usage check for the resulting supergraph schema.
  """
  checkPartialSchema(
    """The name of the graph variant to run the check against."""
    graphVariant: String!
    """Name of the implementing service to validate the partial schema against"""
    implementingServiceName: String!
    """The partial schema to validate against an implementing service"""
    partialSchema: PartialSchemaInput!
    gitContext: GitContextInput
    historicParameters: HistoricQueryParameters
    """Deprecated and ignored."""
    frontend: String
    """
    Whether to use the maximum retention for historical validation. This only takes
    effect if historicParameters is null.
    """
    useMaximumRetention: Boolean
    isSandboxCheck: Boolean! = false
    """If this check is triggered for an sdl fetched using introspection, this is the endpoint where that schema was being served."""
    introspectionEndpoint: String
  ): CheckPartialSchemaResult!
}

"""Individual permissions for the current user when interacting with a particular Studio graph."""
type GraphRoles {
  """Whether the currently authenticated user is permitted to perform schema checks (i.e., run `rover (sub)graph check`)."""
  canCheckSchemas: Boolean!
  """Whether the currently authenticated user is permitted to create new graph variants."""
  canCreateVariants: Boolean!
  """Whether the currently authenticated user is permitted to delete the graph in question"""
  canDelete: Boolean!
  """Whether the currently authenticated user is permitted to manage user access to the graph in question."""
  canManageAccess: Boolean!
  """Whether the currently authenticated user is permitted to manage the build configuration (e.g., build pipeline version)."""
  canManageBuildConfig: Boolean!
  """Whether the currently authenticated user is permitted to manage third-party integrations (e.g., Datadog forwarding)."""
  canManageIntegrations: Boolean!
  """Whether the currently authenticated user is permitted to manage graph-level API keys."""
  canManageKeys: Boolean!
  """Whether the currently authenticated user is permitted to perform basic administration of variants (e.g., make a variant public)."""
  canManageVariants: Boolean!
  """Whether the currently authenticated user is permitted to view details about the build configuration (e.g. build pipeline version)."""
  canQueryBuildConfig: Boolean!
  """Whether the currently authenticated user is permitted to view details of the check configuration for this graph."""
  canQueryCheckConfiguration: Boolean!
  """Whether the currently authenticated user is permitted to view which subgraphs the graph is composed of."""
  canQueryImplementingServices: Boolean!
  """Whether the currently authenticated user is permitted to download schemas owned by this graph."""
  canQuerySchemas: Boolean!
  """Whether the currently authenticated user is permitted to register operations (i.e. `apollo client:push`) for this graph."""
  canRegisterOperations: Boolean!
  """Whether the currently authenticated user is permitted to make updates to the check configuration for this graph."""
  canWriteCheckConfiguration: Boolean!
}

"""A SHA-256 hash, represented as a lowercase hexadecimal string."""
scalar SHA256

"""A location in a source code file."""
type SourceLocation {
  """Column number."""
  column: Int!
  """Line number."""
  line: Int!
}

enum Status {
  STABLE
  NEXT
  DEPRECATED
}

"""A subgraph in a federated Studio supergraph."""
type Subgraph {
  """The subgraph schema document's SHA256 hash, represented as a hexadecimal string."""
  hash: String!
  """The subgraph's registered name."""
  name: String!
  """The number of fields in this subgraph"""
  numberOfFields: Int
  """The number of types in this subgraph"""
  numberOfTypes: Int
  """The subgraph's routing URL, provided to gateways that use managed federation."""
  routingURL: String!
  """Timestamp of when the subgraph was published."""
  updatedAt: Timestamp
}

"""A change made to a subgraph as part of a launch."""
type SubgraphChange {
  """The subgraph's name."""
  name: ID!
  """The type of change that was made."""
  type: SubgraphChangeType!
}

enum SubgraphChangeType {
  ADDITION
  DELETION
  MODIFICATION
}

"""Input type to provide when running schema checks asynchronously for a federated supergraph."""
input SubgraphCheckAsyncInput {
  """Configuration options for the check execution."""
  config: HistoricQueryParametersInput!
  """The GitHub context to associate with the check."""
  gitContext: GitContextInput!
  """The graph ref of the Studio graph and variant to run checks against (such as `my-graph@current`)."""
  graphRef: ID
  """The URL of the GraphQL endpoint that Apollo Sandbox introspected to obtain the proposed schema. Required if `isSandbox` is `true`."""
  introspectionEndpoint: String
  """If `true`, the check was initiated by Apollo Sandbox."""
  isSandbox: Boolean!
  """The proposed subgraph schema to perform checks with."""
  proposedSchema: GraphQLDocument!
  """The name of the subgraph to check schema changes for."""
  subgraphName: String!
}

"""ISO 8601, extended format with nanoseconds, Zulu (or "[+-]seconds" as a string or number relative to now)"""
scalar Timestamp

"""Counts of changes."""
type TotalChangeSummaryCounts {
  """
  Number of changes that are additions. This includes adding types, adding fields to object, input
  object, and interface types, adding values to enums, adding members to interfaces and unions, and
  adding arguments.
  """
  additions: Int!
  """
  Number of changes that are removals. This includes removing types, removing fields from object,
  input object, and interface types, removing values from enums, removing members from interfaces
  and unions, and removing arguments. This also includes removing @deprecated usages.
  """
  removals: Int!
  """
  Number of changes that are edits. This includes types changing kind, fields and arguments
  changing type, arguments changing default value, and any description changes. This also includes
  edits to @deprecated reason strings.
  """
  edits: Int!
  """Number of changes that are new usages of the @deprecated directive."""
  deprecations: Int!
}

"""Counts of changes at the type level, including interfaces, unions, enums, scalars, input objects, etc."""
type TypeChangeSummaryCounts {
  """Number of changes that are additions of types."""
  additions: Int!
  """Number of changes that are removals of types."""
  removals: Int!
  """
  Number of changes that are edits. This includes types changing kind and any type description
  changes, but also includes adding/removing values from enums, adding/removing members from
  interfaces and unions, and any enum value deprecation and description changes.
  """
  edits: Int!
}

union UpdateOperationCollectionEntryResult = OperationCollectionEntry | PermissionError | ValidationError

union UpdateOperationCollectionResult = OperationCollection | PermissionError | ValidationError

"""Describes the result of publishing a schema to a graph variant."""
type SchemaPublicationResult {
  """A machine-readable response code that indicates the type of result (e.g., `UPLOAD_SUCCESS` or `NO_CHANGES`)"""
  code: String!
  """Whether the schema publish operation succeeded (`true`) or encountered errors (`false`)."""
  success: Boolean!
  """A Human-readable message describing the type of result."""
  message: String!
  """If the publish operation succeeded, this contains its details. Otherwise, this is null."""
  publication: SchemaPublication
}

"""A registered Apollo Studio user."""
type User implements Identity {
  """Returns a list of all active user API keys for the user."""
  apiKeys(includeCookies: Boolean = false): [UserApiKey!]!
  """Returns a representation of this user as an `Actor` type. Useful when determining which actor (usually a `User` or `Graph`) performed a particular action in Studio."""
  asActor: Actor!
  """The user's unique ID."""
  id: ID!
  """A list of the user's memberships in Apollo Studio organizations."""
  memberships: [UserMembership!]!
  """The user's first and last name."""
  name: String!
}

"""
Represents a user API key, which has permissions identical to
its associated Apollo user.
"""
type UserApiKey implements ApiKey {
  """The API key's ID."""
  id: ID!
  """The API key's name, for distinguishing it from other keys."""
  keyName: String
  """The value of the API key. **This is a secret credential!**"""
  token: String!
}

"""A single user's membership in a single Apollo Studio organization."""
type UserMembership {
  """The organization that the user belongs to."""
  account: Organization!
  """The timestamp when the user was added to the organization."""
  createdAt: Timestamp!
  """The user's permission level within the organization."""
  permission: UserPermission!
  """The user that belongs to the organization."""
  user: User!
}

type UserMutation {
  """Creates a new user API key for this user."""
  newKey(keyName: String!): UserApiKey!
  """
  If this user has no active user API keys, this creates one for the user.

  If this user has at least one active user API key, this returns one of those keys at random and does _not_ create a new key.
  """
  provisionKey(keyName: String! = "add-a-name"): ApiKeyProvision
  """Deletes the user API key with the provided ID, if any."""
  removeKey(
    """API key ID"""
    id: ID!
  ): Void
  """Sets a new name for the user API key with the provided ID, if any. This does not invalidate the key or change its value."""
  renameKey(id: ID!, newKeyName: String): UserApiKey
}

enum UserPermission {
  BILLING_MANAGER
  CONSUMER
  CONTRIBUTOR
  DOCUMENTER
  GRAPH_ADMIN
  LEGACY_GRAPH_KEY
  OBSERVER
  ORG_ADMIN
}

"""An error that occurs when an operation contains invalid user input."""
type ValidationError implements Error {
  """The error's details."""
  message: String!
}

"""Always null"""
scalar Void