@usestatemachines/sdk 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +80 -15
  2. package/agents/SKILL.md +9 -4
  3. package/agents/index.js +4 -4
  4. package/agents/llms.txt +7 -5
  5. package/esm/extensions/client.d.ts +56 -8
  6. package/esm/extensions/client.js +67 -5
  7. package/esm/extensions/credentials.js +4 -0
  8. package/esm/extensions/environment.d.ts +11 -2
  9. package/esm/extensions/errors.d.ts +33 -0
  10. package/esm/extensions/errors.js +53 -0
  11. package/esm/extensions/import-data.d.ts +43 -0
  12. package/esm/extensions/import-data.js +88 -0
  13. package/esm/extensions/index.d.ts +4 -3
  14. package/esm/extensions/index.js +1 -1
  15. package/esm/extensions/packaging.d.ts +1 -0
  16. package/esm/extensions/packaging.js +1 -0
  17. package/esm/extensions/zip.d.ts +8 -0
  18. package/esm/extensions/zip.js +121 -0
  19. package/esm/funcs/environments-actors.d.ts +11 -0
  20. package/esm/funcs/environments-actors.js +102 -0
  21. package/esm/funcs/get-import-file.d.ts +12 -0
  22. package/esm/funcs/get-import-file.js +97 -0
  23. package/esm/funcs/list-import-files.d.ts +12 -0
  24. package/esm/funcs/list-import-files.js +98 -0
  25. package/esm/funcs/upload-import.d.ts +12 -0
  26. package/esm/funcs/upload-import.js +96 -0
  27. package/esm/lib/config.d.ts +2 -2
  28. package/esm/lib/config.js +2 -2
  29. package/esm/models/absent-record.d.ts +7 -3
  30. package/esm/models/absent-record.js +3 -2
  31. package/esm/models/actor.d.ts +3 -0
  32. package/esm/models/app-user.d.ts +17 -0
  33. package/esm/models/app-user.js +18 -0
  34. package/esm/models/credentials.d.ts +6 -1
  35. package/esm/models/credentials.js +2 -0
  36. package/esm/models/environment.d.ts +4 -4
  37. package/esm/models/environment.js +3 -4
  38. package/esm/models/error.d.ts +7 -0
  39. package/esm/models/error.js +4 -0
  40. package/esm/models/filled-field.d.ts +14 -0
  41. package/esm/models/filled-field.js +16 -0
  42. package/esm/models/import-actor.d.ts +16 -0
  43. package/esm/models/import-actor.js +15 -0
  44. package/esm/models/import-file.d.ts +56 -0
  45. package/esm/models/import-file.js +67 -0
  46. package/esm/models/import-folder.d.ts +56 -0
  47. package/esm/models/import-folder.js +75 -0
  48. package/esm/models/import-problem.d.ts +4 -4
  49. package/esm/models/import-problem.js +1 -1
  50. package/esm/models/index.d.ts +18 -1
  51. package/esm/models/index.js +18 -1
  52. package/esm/models/known-difference.d.ts +21 -0
  53. package/esm/models/known-difference.js +16 -0
  54. package/esm/models/launch-ui-session.d.ts +12 -2
  55. package/esm/models/launch-ui-session.js +2 -1
  56. package/esm/models/made-id.d.ts +22 -0
  57. package/esm/models/made-id.js +17 -0
  58. package/esm/models/matched-record.d.ts +22 -0
  59. package/esm/models/matched-record.js +17 -0
  60. package/esm/models/object-load.d.ts +21 -0
  61. package/esm/models/object-load.js +17 -0
  62. package/esm/models/operations/create-credentials.d.ts +10 -0
  63. package/esm/models/operations/create-credentials.js +1 -0
  64. package/esm/models/operations/get-import-file.d.ts +13 -0
  65. package/esm/models/operations/get-import-file.js +12 -0
  66. package/esm/models/operations/index.d.ts +4 -0
  67. package/esm/models/operations/index.js +4 -0
  68. package/esm/models/operations/list-actors.d.ts +32 -0
  69. package/esm/models/operations/list-actors.js +26 -0
  70. package/esm/models/operations/list-import-files.d.ts +15 -0
  71. package/esm/models/operations/list-import-files.js +13 -0
  72. package/esm/models/operations/list-snapshots.d.ts +2 -2
  73. package/esm/models/operations/list-snapshots.js +1 -1
  74. package/esm/models/operations/upload-import.d.ts +13 -0
  75. package/esm/models/operations/upload-import.js +17 -0
  76. package/esm/models/problem-counts.d.ts +17 -0
  77. package/esm/models/problem-counts.js +14 -0
  78. package/esm/models/received-import.d.ts +9 -0
  79. package/esm/models/received-import.js +13 -0
  80. package/esm/models/record-source.d.ts +13 -0
  81. package/esm/models/{absent-record-source.js → record-source.js} +3 -3
  82. package/esm/models/snapshot-app-full-load-counts.d.ts +57 -0
  83. package/esm/models/snapshot-app-full-load-counts.js +25 -0
  84. package/esm/models/snapshot-app-full-load.d.ts +101 -0
  85. package/esm/models/snapshot-app-full-load.js +42 -0
  86. package/esm/models/snapshot-app-limited-load-counts.d.ts +16 -0
  87. package/esm/models/snapshot-app-limited-load-counts.js +14 -0
  88. package/esm/models/snapshot-app-limited-load.d.ts +18 -0
  89. package/esm/models/snapshot-app-limited-load.js +16 -0
  90. package/esm/models/snapshot-app-load-counts.d.ts +13 -0
  91. package/esm/models/snapshot-app-load-counts.js +15 -0
  92. package/esm/models/snapshot-app-load.d.ts +5 -12
  93. package/esm/models/snapshot-app-load.js +6 -6
  94. package/esm/models/snapshot-list-item.d.ts +53 -0
  95. package/esm/models/snapshot-list-item.js +42 -0
  96. package/esm/models/snapshot.d.ts +1 -3
  97. package/esm/models/snapshot.js +0 -2
  98. package/esm/models/version.d.ts +3 -0
  99. package/esm/sdk/environments.d.ts +1 -0
  100. package/esm/sdk/environments.js +4 -0
  101. package/esm/sdk/sdk.d.ts +3 -0
  102. package/esm/sdk/sdk.js +12 -0
  103. package/openapi.json +1864 -514
  104. package/package.json +7 -3
  105. package/esm/models/absent-record-source.d.ts +0 -13
package/openapi.json CHANGED
@@ -70,27 +70,18 @@
70
70
  "$ref": "#/components/schemas/AbsentReason"
71
71
  },
72
72
  "source": {
73
- "$ref": "#/components/schemas/AbsentRecordSource"
74
- }
75
- },
76
- "required": ["object", "source", "nativeId", "reason"],
77
- "type": "object"
78
- },
79
- "AbsentRecordSource": {
80
- "description": "The file of the record in the import, such as `salesforce/records/Opportunity.jsonl`, and its line, counted from 1.",
81
- "properties": {
82
- "file": {
83
- "type": "string"
73
+ "$ref": "#/components/schemas/RecordSource"
84
74
  },
85
- "line": {
86
- "exclusiveMinimum": 0,
87
- "type": ["integer", "null"]
75
+ "text": {
76
+ "description": "The text that the record wrote as its ID, such as `acme`, when the text is no vendor ID.",
77
+ "type": "string"
88
78
  }
89
79
  },
90
- "required": ["file", "line"],
80
+ "required": ["object", "source", "nativeId", "reason"],
91
81
  "type": "object"
92
82
  },
93
83
  "Actor": {
84
+ "description": "A user of the app's seed, for display.",
94
85
  "properties": {
95
86
  "id": {
96
87
  "maxLength": 255,
@@ -158,6 +149,31 @@
158
149
  }
159
150
  ]
160
151
  },
152
+ "AppUser": {
153
+ "description": "A user of an app who can sign in, as the app answers it.",
154
+ "properties": {
155
+ "default": {
156
+ "type": "boolean"
157
+ },
158
+ "email": {
159
+ "type": ["string", "null"]
160
+ },
161
+ "id": {
162
+ "type": "string"
163
+ },
164
+ "name": {
165
+ "type": "string"
166
+ },
167
+ "role": {
168
+ "type": ["string", "null"]
169
+ },
170
+ "username": {
171
+ "type": ["string", "null"]
172
+ }
173
+ },
174
+ "required": ["id", "name", "email", "username", "role", "default"],
175
+ "type": "object"
176
+ },
161
177
  "AuditEvent": {
162
178
  "properties": {
163
179
  "data": {
@@ -525,6 +541,9 @@
525
541
  },
526
542
  "Credentials": {
527
543
  "properties": {
544
+ "actor": {
545
+ "$ref": "#/components/schemas/AppUser"
546
+ },
528
547
  "actorId": {
529
548
  "type": "string"
530
549
  },
@@ -584,7 +603,7 @@
584
603
  "type": "string"
585
604
  },
586
605
  "url": {
587
- "description": "The MCP server's URL. On an environment created with `tokenInUrl`, a request with no `Authorization` header acts as the actor that this call picks when you send no `actorId`. To act as `actorId`, send the service's headers.",
606
+ "description": "The MCP server's URL. On an environment created with `tokenInUrl`, a request with no `Authorization` header acts as the app's default user. To act as the user of these credentials, send the service's headers.",
588
607
  "type": "string"
589
608
  }
590
609
  },
@@ -803,8 +822,10 @@
803
822
  "workspace_archived",
804
823
  "version_in_use",
805
824
  "ui_disabled",
825
+ "actor_cannot_sign_in",
806
826
  "body_too_large",
807
827
  "version_unavailable",
828
+ "actor_not_found",
808
829
  "environment_limit_reached",
809
830
  "rate_limited",
810
831
  "internal_error",
@@ -824,6 +845,13 @@
824
845
  "message": {
825
846
  "type": "string"
826
847
  },
848
+ "nearest": {
849
+ "description": "On `actor_not_found`, the users who can act in the app that are nearest to `as`, nearest first.",
850
+ "items": {
851
+ "$ref": "#/components/schemas/AppUser"
852
+ },
853
+ "type": "array"
854
+ },
827
855
  "requestId": {
828
856
  "type": "string"
829
857
  },
@@ -838,6 +866,22 @@
838
866
  "required": ["error"],
839
867
  "type": "object"
840
868
  },
869
+ "FilledField": {
870
+ "properties": {
871
+ "field": {
872
+ "type": "string"
873
+ },
874
+ "object": {
875
+ "type": "string"
876
+ },
877
+ "records": {
878
+ "description": "How many loaded records of the object the app filled the field for.",
879
+ "type": "integer"
880
+ }
881
+ },
882
+ "required": ["object", "field", "records"],
883
+ "type": "object"
884
+ },
841
885
  "Import": {
842
886
  "properties": {
843
887
  "apps": {
@@ -918,6 +962,207 @@
918
962
  ],
919
963
  "type": "object"
920
964
  },
965
+ "ImportActor": {
966
+ "properties": {
967
+ "id": {
968
+ "description": "The ID of the user in the app's database.",
969
+ "type": "string"
970
+ },
971
+ "user": {
972
+ "description": "The entry of `actors` in the manifest: an email, a username or an ID.",
973
+ "type": "string"
974
+ }
975
+ },
976
+ "required": ["user", "id"],
977
+ "type": "object"
978
+ },
979
+ "ImportFile": {
980
+ "oneOf": [
981
+ {
982
+ "properties": {
983
+ "kind": {
984
+ "enum": ["unavailable"],
985
+ "type": "string"
986
+ },
987
+ "reason": {
988
+ "enum": [
989
+ "uploading",
990
+ "invalid",
991
+ "deleted",
992
+ "missing",
993
+ "unreadable",
994
+ "too_large"
995
+ ],
996
+ "type": "string"
997
+ }
998
+ },
999
+ "required": ["kind", "reason"],
1000
+ "type": "object"
1001
+ },
1002
+ {
1003
+ "properties": {
1004
+ "kind": {
1005
+ "enum": ["binary"],
1006
+ "type": "string"
1007
+ },
1008
+ "path": {
1009
+ "type": "string"
1010
+ },
1011
+ "sizeBytes": {
1012
+ "minimum": 0,
1013
+ "type": "integer"
1014
+ }
1015
+ },
1016
+ "required": ["kind", "path", "sizeBytes"],
1017
+ "type": "object"
1018
+ },
1019
+ {
1020
+ "properties": {
1021
+ "kind": {
1022
+ "enum": ["text"],
1023
+ "type": "string"
1024
+ },
1025
+ "path": {
1026
+ "type": "string"
1027
+ },
1028
+ "sizeBytes": {
1029
+ "minimum": 0,
1030
+ "type": "integer"
1031
+ },
1032
+ "tables": {
1033
+ "items": {
1034
+ "properties": {
1035
+ "columns": {
1036
+ "items": {
1037
+ "type": "string"
1038
+ },
1039
+ "type": "array"
1040
+ },
1041
+ "name": {
1042
+ "type": "string"
1043
+ },
1044
+ "rows": {
1045
+ "items": {
1046
+ "items": {
1047
+ "type": "string"
1048
+ },
1049
+ "type": "array"
1050
+ },
1051
+ "type": "array"
1052
+ },
1053
+ "truncated": {
1054
+ "type": "boolean"
1055
+ }
1056
+ },
1057
+ "required": ["name", "columns", "rows", "truncated"],
1058
+ "type": "object"
1059
+ },
1060
+ "type": "array"
1061
+ },
1062
+ "tablesTruncated": {
1063
+ "type": "boolean"
1064
+ },
1065
+ "text": {
1066
+ "type": "string"
1067
+ },
1068
+ "truncated": {
1069
+ "type": "boolean"
1070
+ }
1071
+ },
1072
+ "required": [
1073
+ "kind",
1074
+ "path",
1075
+ "sizeBytes",
1076
+ "text",
1077
+ "truncated",
1078
+ "tablesTruncated",
1079
+ "tables"
1080
+ ],
1081
+ "type": "object"
1082
+ }
1083
+ ]
1084
+ },
1085
+ "ImportFolder": {
1086
+ "oneOf": [
1087
+ {
1088
+ "properties": {
1089
+ "kind": {
1090
+ "enum": ["unavailable"],
1091
+ "type": "string"
1092
+ },
1093
+ "reason": {
1094
+ "enum": [
1095
+ "uploading",
1096
+ "invalid",
1097
+ "deleted",
1098
+ "missing",
1099
+ "unreadable",
1100
+ "too_large"
1101
+ ],
1102
+ "type": "string"
1103
+ }
1104
+ },
1105
+ "required": ["kind", "reason"],
1106
+ "type": "object"
1107
+ },
1108
+ {
1109
+ "properties": {
1110
+ "entries": {
1111
+ "items": {
1112
+ "oneOf": [
1113
+ {
1114
+ "properties": {
1115
+ "kind": {
1116
+ "enum": ["folder"],
1117
+ "type": "string"
1118
+ },
1119
+ "path": {
1120
+ "type": "string"
1121
+ }
1122
+ },
1123
+ "required": ["kind", "path"],
1124
+ "type": "object"
1125
+ },
1126
+ {
1127
+ "properties": {
1128
+ "kind": {
1129
+ "enum": ["file"],
1130
+ "type": "string"
1131
+ },
1132
+ "path": {
1133
+ "type": "string"
1134
+ },
1135
+ "sizeBytes": {
1136
+ "minimum": 0,
1137
+ "type": "integer"
1138
+ }
1139
+ },
1140
+ "required": ["kind", "path", "sizeBytes"],
1141
+ "type": "object"
1142
+ }
1143
+ ]
1144
+ },
1145
+ "type": "array"
1146
+ },
1147
+ "kind": {
1148
+ "enum": ["folder"],
1149
+ "type": "string"
1150
+ },
1151
+ "name": {
1152
+ "type": ["string", "null"]
1153
+ },
1154
+ "nextCursor": {
1155
+ "type": ["string", "null"]
1156
+ },
1157
+ "path": {
1158
+ "type": "string"
1159
+ }
1160
+ },
1161
+ "required": ["kind", "path", "name", "entries", "nextCursor"],
1162
+ "type": "object"
1163
+ }
1164
+ ]
1165
+ },
921
1166
  "ImportProblem": {
922
1167
  "properties": {
923
1168
  "code": {
@@ -936,11 +1181,11 @@
936
1181
  "type": "string"
937
1182
  },
938
1183
  "pointer": {
939
- "description": "The JSON pointer of the value, such as `/apps/0/name`. In a records file, it points into the record on `line`. Null when the problem names no value.",
1184
+ "description": "The JSON pointer of the value, such as `/apps/salesforce/appId`. In a records file, it points into the record on `line`. Null when the problem names no value.",
940
1185
  "type": ["string", "null"]
941
1186
  },
942
1187
  "severity": {
943
- "description": "An error refuses the import: the check of the zip file makes the import `invalid`, and the load of a snapshot from the import fails the snapshot. A warning refuses nothing.",
1188
+ "description": "An error refuses the import, and the check makes the import `invalid`. In `skipRecord` mode, an error in the values, the ID, or the references of a record leaves out only that record. A warning refuses nothing.",
944
1189
  "enum": ["error", "warning"],
945
1190
  "type": "string"
946
1191
  }
@@ -952,12 +1197,39 @@
952
1197
  "enum": ["uploading", "ready", "invalid", "deleted"],
953
1198
  "type": "string"
954
1199
  },
1200
+ "KnownDifference": {
1201
+ "properties": {
1202
+ "field": {
1203
+ "description": "The field, or null for the whole object.",
1204
+ "type": ["string", "null"]
1205
+ },
1206
+ "message": {
1207
+ "type": "string"
1208
+ },
1209
+ "object": {
1210
+ "description": "The object, or null for the whole app.",
1211
+ "type": ["string", "null"]
1212
+ },
1213
+ "values": {
1214
+ "description": "How many values of the import the difference affects, or null when the load did not count them.",
1215
+ "type": ["number", "null"]
1216
+ }
1217
+ },
1218
+ "required": ["object", "field", "message", "values"],
1219
+ "type": "object"
1220
+ },
955
1221
  "LaunchUiSession": {
956
1222
  "additionalProperties": false,
957
1223
  "properties": {
958
1224
  "actorId": {
959
- "maxLength": 255,
960
- "minLength": 1,
1225
+ "deprecated": true,
1226
+ "description": "The old name of `as`. It takes the same values.",
1227
+ "maxLength": 320,
1228
+ "type": "string"
1229
+ },
1230
+ "as": {
1231
+ "description": "The user to act as: an email, a username or an ID of a user of the app. Without it, the call acts as the app's default user.",
1232
+ "maxLength": 320,
961
1233
  "type": "string"
962
1234
  },
963
1235
  "entryPath": {
@@ -978,13 +1250,47 @@
978
1250
  "type": "string"
979
1251
  }
980
1252
  },
981
- "required": [
982
- "serviceId",
983
- "actorId",
984
- "mode",
985
- "launcherOrigin",
986
- "entryPath"
987
- ],
1253
+ "required": ["serviceId", "mode", "launcherOrigin", "entryPath"],
1254
+ "type": "object"
1255
+ },
1256
+ "MadeId": {
1257
+ "properties": {
1258
+ "id": {
1259
+ "description": "The ID that the app made.",
1260
+ "type": "string"
1261
+ },
1262
+ "object": {
1263
+ "type": "string"
1264
+ },
1265
+ "source": {
1266
+ "$ref": "#/components/schemas/RecordSource"
1267
+ },
1268
+ "text": {
1269
+ "description": "The text that the record wrote as its ID, such as `acme`, or null for a record that wrote no ID, whose ID the app made from its place.",
1270
+ "type": ["string", "null"]
1271
+ }
1272
+ },
1273
+ "required": ["object", "source", "text", "id"],
1274
+ "type": "object"
1275
+ },
1276
+ "MatchedRecord": {
1277
+ "properties": {
1278
+ "id": {
1279
+ "description": "The ID of the seed record that the record took over.",
1280
+ "type": "string"
1281
+ },
1282
+ "object": {
1283
+ "type": "string"
1284
+ },
1285
+ "source": {
1286
+ "$ref": "#/components/schemas/RecordSource"
1287
+ },
1288
+ "text": {
1289
+ "description": "The text that the record wrote as its ID, such as `standard`, when the text is no vendor ID.",
1290
+ "type": "string"
1291
+ }
1292
+ },
1293
+ "required": ["object", "source", "id"],
988
1294
  "type": "object"
989
1295
  },
990
1296
  "McpServer": {
@@ -1127,6 +1433,27 @@
1127
1433
  ],
1128
1434
  "type": "object"
1129
1435
  },
1436
+ "ObjectLoad": {
1437
+ "properties": {
1438
+ "absent": {
1439
+ "description": "How many records of the object did not load.",
1440
+ "type": "integer"
1441
+ },
1442
+ "matched": {
1443
+ "description": "How many records of the object took over a seed record.",
1444
+ "type": "integer"
1445
+ },
1446
+ "native": {
1447
+ "description": "How many records of the object loaded as records of their own, under their vendor IDs or IDs that the app made.",
1448
+ "type": "integer"
1449
+ },
1450
+ "object": {
1451
+ "type": "string"
1452
+ }
1453
+ },
1454
+ "required": ["object", "native", "matched", "absent"],
1455
+ "type": "object"
1456
+ },
1130
1457
  "Organization": {
1131
1458
  "properties": {
1132
1459
  "domain": {
@@ -1173,21 +1500,64 @@
1173
1500
  "required": ["type", "id", "name"],
1174
1501
  "type": "object"
1175
1502
  },
1176
- "Request": {
1503
+ "ProblemCounts": {
1504
+ "description": "For each severity, how many problems of the load have each code. The errors are those of the records that did not load in `skipRecord` mode.",
1177
1505
  "properties": {
1178
- "appName": {
1179
- "type": "string"
1180
- },
1181
- "completedAt": {
1182
- "format": "date-time",
1183
- "type": "string"
1184
- },
1185
- "durationMs": {
1186
- "minimum": 0,
1187
- "type": "integer"
1506
+ "error": {
1507
+ "additionalProperties": {
1508
+ "type": "integer"
1509
+ },
1510
+ "type": "object"
1188
1511
  },
1189
- "environmentId": {
1190
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1512
+ "warning": {
1513
+ "additionalProperties": {
1514
+ "type": "integer"
1515
+ },
1516
+ "type": "object"
1517
+ }
1518
+ },
1519
+ "required": ["error", "warning"],
1520
+ "type": "object"
1521
+ },
1522
+ "ReceivedImport": {
1523
+ "properties": {
1524
+ "received": {
1525
+ "enum": [true],
1526
+ "type": "boolean"
1527
+ }
1528
+ },
1529
+ "required": ["received"],
1530
+ "type": "object"
1531
+ },
1532
+ "RecordSource": {
1533
+ "description": "The file that holds the record in the import, such as `salesforce/records/Opportunity.jsonl` or the manifest `acme.yaml`, and the line where the record starts, counted from 1.",
1534
+ "properties": {
1535
+ "file": {
1536
+ "type": "string"
1537
+ },
1538
+ "line": {
1539
+ "exclusiveMinimum": 0,
1540
+ "type": ["integer", "null"]
1541
+ }
1542
+ },
1543
+ "required": ["file", "line"],
1544
+ "type": "object"
1545
+ },
1546
+ "Request": {
1547
+ "properties": {
1548
+ "appName": {
1549
+ "type": "string"
1550
+ },
1551
+ "completedAt": {
1552
+ "format": "date-time",
1553
+ "type": "string"
1554
+ },
1555
+ "durationMs": {
1556
+ "minimum": 0,
1557
+ "type": "integer"
1558
+ },
1559
+ "environmentId": {
1560
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1191
1561
  "type": "string"
1192
1562
  },
1193
1563
  "errorCode": {
@@ -1462,9 +1832,6 @@
1462
1832
  "additionalProperties": {},
1463
1833
  "type": "object"
1464
1834
  },
1465
- "sizeBytes": {
1466
- "type": ["integer", "null"]
1467
- },
1468
1835
  "version": {
1469
1836
  "type": "string"
1470
1837
  },
@@ -1479,8 +1846,7 @@
1479
1846
  "versionId",
1480
1847
  "version",
1481
1848
  "setup",
1482
- "services",
1483
- "sizeBytes"
1849
+ "services"
1484
1850
  ],
1485
1851
  "type": "object"
1486
1852
  },
@@ -1524,9 +1890,6 @@
1524
1890
  "format": "date-time",
1525
1891
  "type": ["string", "null"]
1526
1892
  },
1527
- "sizeBytes": {
1528
- "type": ["integer", "null"]
1529
- },
1530
1893
  "status": {
1531
1894
  "$ref": "#/components/schemas/SnapshotStatus"
1532
1895
  },
@@ -1543,7 +1906,6 @@
1543
1906
  "name",
1544
1907
  "status",
1545
1908
  "failure",
1546
- "sizeBytes",
1547
1909
  "apps",
1548
1910
  "createdBy",
1549
1911
  "createdAt",
@@ -1552,8 +1914,8 @@
1552
1914
  ],
1553
1915
  "type": "object"
1554
1916
  },
1555
- "SnapshotAppLoad": {
1556
- "description": "What the load of the snapshot's import left out of the app. Null for a snapshot of an environment, and until the app's load ends.",
1917
+ "SnapshotAppFullLoad": {
1918
+ "description": "The report of the load of the snapshot's import into the app. Each list holds its first items, which fit in the report's size, and the count beside it counts all of them. Null for a snapshot of an environment, and until the app's load ends.",
1557
1919
  "properties": {
1558
1920
  "absent": {
1559
1921
  "description": "The first records of the import that did not load, in the order of the import.",
@@ -1563,12 +1925,264 @@
1563
1925
  "type": "array"
1564
1926
  },
1565
1927
  "absentCount": {
1566
- "description": "How many records of the import did not load. It is larger than the length of `absent` when they did not all fit.",
1928
+ "description": "How many records of the import did not load.",
1929
+ "type": "integer"
1930
+ },
1931
+ "actorCount": {
1932
+ "description": "How many users the import names in `actors` for the app.",
1933
+ "type": "integer"
1934
+ },
1935
+ "actors": {
1936
+ "description": "The first users that the import names in `actors`, in that order. The first is the default user.",
1937
+ "items": {
1938
+ "$ref": "#/components/schemas/ImportActor"
1939
+ },
1940
+ "type": "array"
1941
+ },
1942
+ "deactivated": {
1943
+ "description": "The IDs of the first seed users that the load deactivated.",
1944
+ "items": {
1945
+ "type": "string"
1946
+ },
1947
+ "type": "array"
1948
+ },
1949
+ "deactivatedCount": {
1950
+ "description": "How many seed users the load deactivated, because the import brings users of its own.",
1951
+ "type": "integer"
1952
+ },
1953
+ "details": {
1954
+ "enum": ["full"],
1955
+ "type": "string"
1956
+ },
1957
+ "differenceCount": {
1958
+ "description": "How many differences from the vendor's app the load knows of.",
1959
+ "type": "integer"
1960
+ },
1961
+ "differences": {
1962
+ "description": "The first differences from the vendor's app.",
1963
+ "items": {
1964
+ "$ref": "#/components/schemas/KnownDifference"
1965
+ },
1966
+ "type": "array"
1967
+ },
1968
+ "filled": {
1969
+ "description": "The first fields that the app filled, by object and field.",
1970
+ "items": {
1971
+ "$ref": "#/components/schemas/FilledField"
1972
+ },
1973
+ "type": "array"
1974
+ },
1975
+ "filledCount": {
1976
+ "description": "How many fields the app filled for loaded records that did not write them.",
1977
+ "type": "integer"
1978
+ },
1979
+ "filledValueCount": {
1980
+ "description": "How many values the app filled in those fields.",
1981
+ "type": "integer"
1982
+ },
1983
+ "made": {
1984
+ "description": "The first IDs that the app made, in the order of the import.",
1985
+ "items": {
1986
+ "$ref": "#/components/schemas/MadeId"
1987
+ },
1988
+ "type": "array"
1989
+ },
1990
+ "madeCount": {
1991
+ "description": "How many IDs the app made for records, from the text that a record wrote as its ID or from the record's place.",
1992
+ "type": "integer"
1993
+ },
1994
+ "matched": {
1995
+ "description": "The first records that took over a seed record, in the order of the import.",
1996
+ "items": {
1997
+ "$ref": "#/components/schemas/MatchedRecord"
1998
+ },
1999
+ "type": "array"
2000
+ },
2001
+ "matchedCount": {
2002
+ "description": "How many records took over a seed record.",
2003
+ "type": "integer"
2004
+ },
2005
+ "objectCount": {
2006
+ "description": "How many objects of the app the import holds records of.",
2007
+ "type": "integer"
2008
+ },
2009
+ "objects": {
2010
+ "description": "For the first objects of the app that the import holds records of, by name, how many of its records loaded, took over a seed record, or did not load.",
2011
+ "items": {
2012
+ "$ref": "#/components/schemas/ObjectLoad"
2013
+ },
2014
+ "type": "array"
2015
+ },
2016
+ "problemCounts": {
2017
+ "$ref": "#/components/schemas/ProblemCounts"
2018
+ },
2019
+ "warningCount": {
2020
+ "description": "How many warnings the load found.",
1567
2021
  "type": "integer"
2022
+ },
2023
+ "warnings": {
2024
+ "description": "The first warnings of the load, in the order of file, line and pointer.",
2025
+ "items": {
2026
+ "$ref": "#/components/schemas/ImportProblem"
2027
+ },
2028
+ "type": "array"
1568
2029
  }
1569
2030
  },
1570
- "required": ["absentCount", "absent"],
1571
- "type": ["object", "null"]
2031
+ "required": [
2032
+ "details",
2033
+ "objectCount",
2034
+ "madeCount",
2035
+ "matchedCount",
2036
+ "filledCount",
2037
+ "filledValueCount",
2038
+ "actorCount",
2039
+ "deactivatedCount",
2040
+ "absentCount",
2041
+ "differenceCount",
2042
+ "problemCounts",
2043
+ "warningCount",
2044
+ "objects",
2045
+ "made",
2046
+ "matched",
2047
+ "filled",
2048
+ "actors",
2049
+ "deactivated",
2050
+ "absent",
2051
+ "differences",
2052
+ "warnings"
2053
+ ],
2054
+ "type": "object"
2055
+ },
2056
+ "SnapshotAppFullLoadCounts": {
2057
+ "description": "Every count of the report of the load of the snapshot's import into the app, as the list of snapshots answers it. Get the snapshot for the first items of each list. Null for a snapshot of an environment, and until the app's load ends.",
2058
+ "properties": {
2059
+ "absentCount": {
2060
+ "description": "How many records of the import did not load.",
2061
+ "type": "integer"
2062
+ },
2063
+ "actorCount": {
2064
+ "description": "How many users the import names in `actors` for the app.",
2065
+ "type": "integer"
2066
+ },
2067
+ "deactivatedCount": {
2068
+ "description": "How many seed users the load deactivated, because the import brings users of its own.",
2069
+ "type": "integer"
2070
+ },
2071
+ "details": {
2072
+ "enum": ["full"],
2073
+ "type": "string"
2074
+ },
2075
+ "differenceCount": {
2076
+ "description": "How many differences from the vendor's app the load knows of.",
2077
+ "type": "integer"
2078
+ },
2079
+ "filledCount": {
2080
+ "description": "How many fields the app filled for loaded records that did not write them.",
2081
+ "type": "integer"
2082
+ },
2083
+ "filledValueCount": {
2084
+ "description": "How many values the app filled in those fields.",
2085
+ "type": "integer"
2086
+ },
2087
+ "madeCount": {
2088
+ "description": "How many IDs the app made for records, from the text that a record wrote as its ID or from the record's place.",
2089
+ "type": "integer"
2090
+ },
2091
+ "matchedCount": {
2092
+ "description": "How many records took over a seed record.",
2093
+ "type": "integer"
2094
+ },
2095
+ "objectCount": {
2096
+ "description": "How many objects of the app the import holds records of.",
2097
+ "type": "integer"
2098
+ },
2099
+ "problemCounts": {
2100
+ "$ref": "#/components/schemas/ProblemCounts"
2101
+ },
2102
+ "warningCount": {
2103
+ "description": "How many warnings the load found.",
2104
+ "type": "integer"
2105
+ }
2106
+ },
2107
+ "required": [
2108
+ "details",
2109
+ "objectCount",
2110
+ "madeCount",
2111
+ "matchedCount",
2112
+ "filledCount",
2113
+ "filledValueCount",
2114
+ "actorCount",
2115
+ "deactivatedCount",
2116
+ "absentCount",
2117
+ "differenceCount",
2118
+ "problemCounts",
2119
+ "warningCount"
2120
+ ],
2121
+ "type": "object"
2122
+ },
2123
+ "SnapshotAppLimitedLoad": {
2124
+ "description": "The recorded count and first skipped records. Additional import diagnostics were not recorded for this snapshot.",
2125
+ "properties": {
2126
+ "absent": {
2127
+ "items": {
2128
+ "$ref": "#/components/schemas/AbsentRecord"
2129
+ },
2130
+ "type": "array"
2131
+ },
2132
+ "absentCount": {
2133
+ "description": "How many records of the import did not load.",
2134
+ "type": "integer"
2135
+ },
2136
+ "details": {
2137
+ "enum": ["limited"],
2138
+ "type": "string"
2139
+ }
2140
+ },
2141
+ "required": ["details", "absentCount", "absent"],
2142
+ "type": "object"
2143
+ },
2144
+ "SnapshotAppLimitedLoadCounts": {
2145
+ "description": "The recorded count of skipped records. Additional import diagnostics were not recorded for this snapshot.",
2146
+ "properties": {
2147
+ "absentCount": {
2148
+ "description": "How many records of the import did not load.",
2149
+ "type": "integer"
2150
+ },
2151
+ "details": {
2152
+ "enum": ["limited"],
2153
+ "type": "string"
2154
+ }
2155
+ },
2156
+ "required": ["details", "absentCount"],
2157
+ "type": "object"
2158
+ },
2159
+ "SnapshotAppLoad": {
2160
+ "description": "Recorded import diagnostics. Full reports contain every diagnostic category. Limited reports preserve skipped records when additional details were not recorded.",
2161
+ "oneOf": [
2162
+ {
2163
+ "$ref": "#/components/schemas/SnapshotAppFullLoad"
2164
+ },
2165
+ {
2166
+ "$ref": "#/components/schemas/SnapshotAppLimitedLoad"
2167
+ },
2168
+ {
2169
+ "type": "null"
2170
+ }
2171
+ ]
2172
+ },
2173
+ "SnapshotAppLoadCounts": {
2174
+ "description": "Recorded import counts. Full reports contain every diagnostic count. Limited reports contain only the skipped-record count.",
2175
+ "oneOf": [
2176
+ {
2177
+ "$ref": "#/components/schemas/SnapshotAppFullLoadCounts"
2178
+ },
2179
+ {
2180
+ "$ref": "#/components/schemas/SnapshotAppLimitedLoadCounts"
2181
+ },
2182
+ {
2183
+ "type": "null"
2184
+ }
2185
+ ]
1572
2186
  },
1573
2187
  "SnapshotFailure": {
1574
2188
  "anyOf": [
@@ -1613,34 +2227,140 @@
1613
2227
  }
1614
2228
  ]
1615
2229
  },
1616
- "SnapshotStatus": {
1617
- "enum": ["saving", "ready", "failed", "deleted"],
1618
- "type": "string"
1619
- },
1620
- "UiSessionLaunch": {
2230
+ "SnapshotListItem": {
2231
+ "description": "A snapshot as the list answers it: each app's load holds its counts only. Get the snapshot for the lists of each load.",
1621
2232
  "properties": {
1622
- "actorId": {
1623
- "type": "string"
2233
+ "apps": {
2234
+ "items": {
2235
+ "properties": {
2236
+ "appId": {
2237
+ "type": "string"
2238
+ },
2239
+ "load": {
2240
+ "$ref": "#/components/schemas/SnapshotAppLoadCounts"
2241
+ },
2242
+ "name": {
2243
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2244
+ "type": "string"
2245
+ },
2246
+ "services": {
2247
+ "additionalProperties": {},
2248
+ "type": "object"
2249
+ },
2250
+ "setup": {
2251
+ "additionalProperties": {},
2252
+ "type": "object"
2253
+ },
2254
+ "version": {
2255
+ "type": "string"
2256
+ },
2257
+ "versionId": {
2258
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2259
+ "type": "string"
2260
+ }
2261
+ },
2262
+ "required": [
2263
+ "name",
2264
+ "appId",
2265
+ "versionId",
2266
+ "version",
2267
+ "setup",
2268
+ "services"
2269
+ ],
2270
+ "type": "object"
2271
+ },
2272
+ "type": "array"
1624
2273
  },
1625
- "appName": {
1626
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
2274
+ "createdAt": {
2275
+ "format": "date-time",
1627
2276
  "type": "string"
1628
2277
  },
1629
- "entryPath": {
1630
- "type": "string"
2278
+ "createdBy": {
2279
+ "$ref": "#/components/schemas/Principal"
2280
+ },
2281
+ "deletedAt": {
2282
+ "format": "date-time",
2283
+ "type": ["string", "null"]
1631
2284
  },
1632
2285
  "environmentId": {
2286
+ "description": "The environment that the snapshot copies, or null for a snapshot built from an import.",
1633
2287
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1634
- "type": "string"
2288
+ "type": ["string", "null"]
1635
2289
  },
1636
- "exchangeUrl": {
1637
- "type": "string"
2290
+ "environmentName": {
2291
+ "type": ["string", "null"]
1638
2292
  },
1639
- "expiresAt": {
1640
- "format": "date-time",
1641
- "type": "string"
2293
+ "failure": {
2294
+ "$ref": "#/components/schemas/SnapshotFailure"
1642
2295
  },
1643
- "grant": {
2296
+ "id": {
2297
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2298
+ "type": "string"
2299
+ },
2300
+ "importId": {
2301
+ "description": "The import that the snapshot was built from, or null for a snapshot of an environment.",
2302
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2303
+ "type": ["string", "null"]
2304
+ },
2305
+ "name": {
2306
+ "type": ["string", "null"]
2307
+ },
2308
+ "readyAt": {
2309
+ "format": "date-time",
2310
+ "type": ["string", "null"]
2311
+ },
2312
+ "status": {
2313
+ "$ref": "#/components/schemas/SnapshotStatus"
2314
+ },
2315
+ "workspaceId": {
2316
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2317
+ "type": "string"
2318
+ }
2319
+ },
2320
+ "required": [
2321
+ "id",
2322
+ "workspaceId",
2323
+ "environmentId",
2324
+ "environmentName",
2325
+ "name",
2326
+ "status",
2327
+ "failure",
2328
+ "apps",
2329
+ "createdBy",
2330
+ "createdAt",
2331
+ "readyAt",
2332
+ "deletedAt"
2333
+ ],
2334
+ "type": "object"
2335
+ },
2336
+ "SnapshotStatus": {
2337
+ "enum": ["saving", "ready", "failed", "deleted"],
2338
+ "type": "string"
2339
+ },
2340
+ "UiSessionLaunch": {
2341
+ "properties": {
2342
+ "actorId": {
2343
+ "type": "string"
2344
+ },
2345
+ "appName": {
2346
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2347
+ "type": "string"
2348
+ },
2349
+ "entryPath": {
2350
+ "type": "string"
2351
+ },
2352
+ "environmentId": {
2353
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2354
+ "type": "string"
2355
+ },
2356
+ "exchangeUrl": {
2357
+ "type": "string"
2358
+ },
2359
+ "expiresAt": {
2360
+ "format": "date-time",
2361
+ "type": "string"
2362
+ },
2363
+ "grant": {
1644
2364
  "type": "string"
1645
2365
  },
1646
2366
  "grantExpiresAt": {
@@ -1707,6 +2427,7 @@
1707
2427
  "Version": {
1708
2428
  "properties": {
1709
2429
  "actors": {
2430
+ "description": "The seed's users, for display. Credentials can act as any user who can sign in to the running app. `GET /v1/environments/{environmentId}/apps/{appName}/actors` lists them.",
1710
2431
  "items": {
1711
2432
  "$ref": "#/components/schemas/Actor"
1712
2433
  },
@@ -1979,10 +2700,716 @@
1979
2700
  },
1980
2701
  {
1981
2702
  "in": "query",
1982
- "name": "cursor",
2703
+ "name": "cursor",
2704
+ "required": false,
2705
+ "schema": {
2706
+ "maxLength": 2048,
2707
+ "type": "string"
2708
+ }
2709
+ }
2710
+ ],
2711
+ "responses": {
2712
+ "200": {
2713
+ "content": {
2714
+ "application/json": {
2715
+ "schema": {
2716
+ "properties": {
2717
+ "data": {
2718
+ "items": {
2719
+ "$ref": "#/components/schemas/Version"
2720
+ },
2721
+ "type": "array"
2722
+ },
2723
+ "nextCursor": {
2724
+ "type": ["string", "null"]
2725
+ }
2726
+ },
2727
+ "required": ["data", "nextCursor"],
2728
+ "type": "object"
2729
+ }
2730
+ }
2731
+ },
2732
+ "description": "The app's published versions, newest first"
2733
+ },
2734
+ "400": {
2735
+ "content": {
2736
+ "application/json": {
2737
+ "schema": {
2738
+ "$ref": "#/components/schemas/Error"
2739
+ }
2740
+ }
2741
+ },
2742
+ "description": "Invalid request"
2743
+ },
2744
+ "401": {
2745
+ "content": {
2746
+ "application/json": {
2747
+ "schema": {
2748
+ "$ref": "#/components/schemas/Error"
2749
+ }
2750
+ }
2751
+ },
2752
+ "description": "Authentication required"
2753
+ },
2754
+ "403": {
2755
+ "content": {
2756
+ "application/json": {
2757
+ "schema": {
2758
+ "$ref": "#/components/schemas/Error"
2759
+ }
2760
+ }
2761
+ },
2762
+ "description": "Permission denied"
2763
+ },
2764
+ "404": {
2765
+ "content": {
2766
+ "application/json": {
2767
+ "schema": {
2768
+ "$ref": "#/components/schemas/Error"
2769
+ }
2770
+ }
2771
+ },
2772
+ "description": "Resource not found"
2773
+ },
2774
+ "409": {
2775
+ "content": {
2776
+ "application/json": {
2777
+ "schema": {
2778
+ "$ref": "#/components/schemas/Error"
2779
+ }
2780
+ }
2781
+ },
2782
+ "description": "Conflicting request"
2783
+ },
2784
+ "413": {
2785
+ "content": {
2786
+ "application/json": {
2787
+ "schema": {
2788
+ "$ref": "#/components/schemas/Error"
2789
+ }
2790
+ }
2791
+ },
2792
+ "description": "Request body too large"
2793
+ },
2794
+ "422": {
2795
+ "content": {
2796
+ "application/json": {
2797
+ "schema": {
2798
+ "$ref": "#/components/schemas/Error"
2799
+ }
2800
+ }
2801
+ },
2802
+ "description": "Version unavailable"
2803
+ },
2804
+ "429": {
2805
+ "content": {
2806
+ "application/json": {
2807
+ "schema": {
2808
+ "$ref": "#/components/schemas/Error"
2809
+ }
2810
+ }
2811
+ },
2812
+ "description": "Limit reached"
2813
+ },
2814
+ "500": {
2815
+ "content": {
2816
+ "application/json": {
2817
+ "schema": {
2818
+ "$ref": "#/components/schemas/Error"
2819
+ }
2820
+ }
2821
+ },
2822
+ "description": "Unexpected failure"
2823
+ },
2824
+ "503": {
2825
+ "content": {
2826
+ "application/json": {
2827
+ "schema": {
2828
+ "$ref": "#/components/schemas/Error"
2829
+ }
2830
+ }
2831
+ },
2832
+ "description": "Dependency unavailable"
2833
+ }
2834
+ },
2835
+ "security": [
2836
+ {
2837
+ "bearerAuth": []
2838
+ }
2839
+ ]
2840
+ }
2841
+ },
2842
+ "/v1/audit-events": {
2843
+ "get": {
2844
+ "operationId": "listAuditEvents",
2845
+ "parameters": [
2846
+ {
2847
+ "in": "query",
2848
+ "name": "limit",
2849
+ "required": false,
2850
+ "schema": {
2851
+ "default": 50,
2852
+ "maximum": 100,
2853
+ "minimum": 1,
2854
+ "type": "integer"
2855
+ }
2856
+ },
2857
+ {
2858
+ "in": "query",
2859
+ "name": "cursor",
2860
+ "required": false,
2861
+ "schema": {
2862
+ "maxLength": 2048,
2863
+ "type": "string"
2864
+ }
2865
+ },
2866
+ {
2867
+ "in": "query",
2868
+ "name": "workspaceId",
2869
+ "required": false,
2870
+ "schema": {
2871
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2872
+ "type": "string"
2873
+ }
2874
+ },
2875
+ {
2876
+ "in": "query",
2877
+ "name": "environmentId",
2878
+ "required": false,
2879
+ "schema": {
2880
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2881
+ "type": "string"
2882
+ }
2883
+ }
2884
+ ],
2885
+ "responses": {
2886
+ "200": {
2887
+ "content": {
2888
+ "application/json": {
2889
+ "schema": {
2890
+ "properties": {
2891
+ "data": {
2892
+ "items": {
2893
+ "$ref": "#/components/schemas/AuditEvent"
2894
+ },
2895
+ "type": "array"
2896
+ },
2897
+ "nextCursor": {
2898
+ "type": ["string", "null"]
2899
+ }
2900
+ },
2901
+ "required": ["data", "nextCursor"],
2902
+ "type": "object"
2903
+ }
2904
+ }
2905
+ },
2906
+ "description": "A workspace's or an environment's audit events, newest first"
2907
+ },
2908
+ "400": {
2909
+ "content": {
2910
+ "application/json": {
2911
+ "schema": {
2912
+ "$ref": "#/components/schemas/Error"
2913
+ }
2914
+ }
2915
+ },
2916
+ "description": "Invalid request"
2917
+ },
2918
+ "401": {
2919
+ "content": {
2920
+ "application/json": {
2921
+ "schema": {
2922
+ "$ref": "#/components/schemas/Error"
2923
+ }
2924
+ }
2925
+ },
2926
+ "description": "Authentication required"
2927
+ },
2928
+ "403": {
2929
+ "content": {
2930
+ "application/json": {
2931
+ "schema": {
2932
+ "$ref": "#/components/schemas/Error"
2933
+ }
2934
+ }
2935
+ },
2936
+ "description": "Permission denied"
2937
+ },
2938
+ "404": {
2939
+ "content": {
2940
+ "application/json": {
2941
+ "schema": {
2942
+ "$ref": "#/components/schemas/Error"
2943
+ }
2944
+ }
2945
+ },
2946
+ "description": "Resource not found"
2947
+ },
2948
+ "409": {
2949
+ "content": {
2950
+ "application/json": {
2951
+ "schema": {
2952
+ "$ref": "#/components/schemas/Error"
2953
+ }
2954
+ }
2955
+ },
2956
+ "description": "Conflicting request"
2957
+ },
2958
+ "413": {
2959
+ "content": {
2960
+ "application/json": {
2961
+ "schema": {
2962
+ "$ref": "#/components/schemas/Error"
2963
+ }
2964
+ }
2965
+ },
2966
+ "description": "Request body too large"
2967
+ },
2968
+ "422": {
2969
+ "content": {
2970
+ "application/json": {
2971
+ "schema": {
2972
+ "$ref": "#/components/schemas/Error"
2973
+ }
2974
+ }
2975
+ },
2976
+ "description": "Version unavailable"
2977
+ },
2978
+ "429": {
2979
+ "content": {
2980
+ "application/json": {
2981
+ "schema": {
2982
+ "$ref": "#/components/schemas/Error"
2983
+ }
2984
+ }
2985
+ },
2986
+ "description": "Limit reached"
2987
+ },
2988
+ "500": {
2989
+ "content": {
2990
+ "application/json": {
2991
+ "schema": {
2992
+ "$ref": "#/components/schemas/Error"
2993
+ }
2994
+ }
2995
+ },
2996
+ "description": "Unexpected failure"
2997
+ },
2998
+ "503": {
2999
+ "content": {
3000
+ "application/json": {
3001
+ "schema": {
3002
+ "$ref": "#/components/schemas/Error"
3003
+ }
3004
+ }
3005
+ },
3006
+ "description": "Dependency unavailable"
3007
+ }
3008
+ },
3009
+ "security": [
3010
+ {
3011
+ "bearerAuth": []
3012
+ }
3013
+ ]
3014
+ }
3015
+ },
3016
+ "/v1/environments": {
3017
+ "get": {
3018
+ "operationId": "listEnvironments",
3019
+ "parameters": [
3020
+ {
3021
+ "in": "query",
3022
+ "name": "limit",
3023
+ "required": false,
3024
+ "schema": {
3025
+ "default": 50,
3026
+ "maximum": 100,
3027
+ "minimum": 1,
3028
+ "type": "integer"
3029
+ }
3030
+ },
3031
+ {
3032
+ "in": "query",
3033
+ "name": "cursor",
3034
+ "required": false,
3035
+ "schema": {
3036
+ "maxLength": 2048,
3037
+ "type": "string"
3038
+ }
3039
+ },
3040
+ {
3041
+ "in": "query",
3042
+ "name": "workspaceId",
3043
+ "required": false,
3044
+ "schema": {
3045
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3046
+ "type": "string"
3047
+ }
3048
+ },
3049
+ {
3050
+ "in": "query",
3051
+ "name": "status",
3052
+ "required": false,
3053
+ "schema": {
3054
+ "items": {
3055
+ "$ref": "#/components/schemas/EnvironmentStatus"
3056
+ },
3057
+ "maxItems": 5,
3058
+ "type": "array"
3059
+ }
3060
+ },
3061
+ {
3062
+ "in": "query",
3063
+ "name": "appId",
3064
+ "required": false,
3065
+ "schema": {
3066
+ "items": {
3067
+ "pattern": "^[a-z][a-z0-9-]{1,39}$",
3068
+ "type": "string"
3069
+ },
3070
+ "maxItems": 20,
3071
+ "type": "array"
3072
+ }
3073
+ },
3074
+ {
3075
+ "in": "query",
3076
+ "name": "createdBy",
3077
+ "required": false,
3078
+ "schema": {
3079
+ "items": {
3080
+ "pattern": "^(user_[0-9A-Za-z]+|key_[0-9a-z]{16})$",
3081
+ "type": "string"
3082
+ },
3083
+ "maxItems": 50,
3084
+ "type": "array"
3085
+ }
3086
+ },
3087
+ {
3088
+ "in": "query",
3089
+ "name": "snapshotId",
3090
+ "required": false,
3091
+ "schema": {
3092
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3093
+ "type": "string"
3094
+ }
3095
+ },
3096
+ {
3097
+ "in": "query",
3098
+ "name": "search",
3099
+ "required": false,
3100
+ "schema": {
3101
+ "maxLength": 120,
3102
+ "type": "string"
3103
+ }
3104
+ },
3105
+ {
3106
+ "in": "query",
3107
+ "name": "label",
3108
+ "required": false,
3109
+ "schema": {
3110
+ "items": {
3111
+ "pattern": "^[^=]+=.*$",
3112
+ "type": "string"
3113
+ },
3114
+ "maxItems": 32,
3115
+ "type": "array"
3116
+ }
3117
+ }
3118
+ ],
3119
+ "responses": {
3120
+ "200": {
3121
+ "content": {
3122
+ "application/json": {
3123
+ "schema": {
3124
+ "properties": {
3125
+ "data": {
3126
+ "items": {
3127
+ "$ref": "#/components/schemas/Environment"
3128
+ },
3129
+ "type": "array"
3130
+ },
3131
+ "nextCursor": {
3132
+ "type": ["string", "null"]
3133
+ }
3134
+ },
3135
+ "required": ["data", "nextCursor"],
3136
+ "type": "object"
3137
+ }
3138
+ }
3139
+ },
3140
+ "description": "The workspace's environments, newest created first"
3141
+ },
3142
+ "400": {
3143
+ "content": {
3144
+ "application/json": {
3145
+ "schema": {
3146
+ "$ref": "#/components/schemas/Error"
3147
+ }
3148
+ }
3149
+ },
3150
+ "description": "Invalid request"
3151
+ },
3152
+ "401": {
3153
+ "content": {
3154
+ "application/json": {
3155
+ "schema": {
3156
+ "$ref": "#/components/schemas/Error"
3157
+ }
3158
+ }
3159
+ },
3160
+ "description": "Authentication required"
3161
+ },
3162
+ "403": {
3163
+ "content": {
3164
+ "application/json": {
3165
+ "schema": {
3166
+ "$ref": "#/components/schemas/Error"
3167
+ }
3168
+ }
3169
+ },
3170
+ "description": "Permission denied"
3171
+ },
3172
+ "404": {
3173
+ "content": {
3174
+ "application/json": {
3175
+ "schema": {
3176
+ "$ref": "#/components/schemas/Error"
3177
+ }
3178
+ }
3179
+ },
3180
+ "description": "Resource not found"
3181
+ },
3182
+ "409": {
3183
+ "content": {
3184
+ "application/json": {
3185
+ "schema": {
3186
+ "$ref": "#/components/schemas/Error"
3187
+ }
3188
+ }
3189
+ },
3190
+ "description": "Conflicting request"
3191
+ },
3192
+ "413": {
3193
+ "content": {
3194
+ "application/json": {
3195
+ "schema": {
3196
+ "$ref": "#/components/schemas/Error"
3197
+ }
3198
+ }
3199
+ },
3200
+ "description": "Request body too large"
3201
+ },
3202
+ "422": {
3203
+ "content": {
3204
+ "application/json": {
3205
+ "schema": {
3206
+ "$ref": "#/components/schemas/Error"
3207
+ }
3208
+ }
3209
+ },
3210
+ "description": "Version unavailable"
3211
+ },
3212
+ "429": {
3213
+ "content": {
3214
+ "application/json": {
3215
+ "schema": {
3216
+ "$ref": "#/components/schemas/Error"
3217
+ }
3218
+ }
3219
+ },
3220
+ "description": "Limit reached"
3221
+ },
3222
+ "500": {
3223
+ "content": {
3224
+ "application/json": {
3225
+ "schema": {
3226
+ "$ref": "#/components/schemas/Error"
3227
+ }
3228
+ }
3229
+ },
3230
+ "description": "Unexpected failure"
3231
+ },
3232
+ "503": {
3233
+ "content": {
3234
+ "application/json": {
3235
+ "schema": {
3236
+ "$ref": "#/components/schemas/Error"
3237
+ }
3238
+ }
3239
+ },
3240
+ "description": "Dependency unavailable"
3241
+ }
3242
+ },
3243
+ "security": [
3244
+ {
3245
+ "bearerAuth": []
3246
+ }
3247
+ ]
3248
+ },
3249
+ "post": {
3250
+ "operationId": "createEnvironment",
3251
+ "parameters": [
3252
+ {
3253
+ "in": "header",
3254
+ "name": "idempotency-key",
3255
+ "required": false,
3256
+ "schema": {
3257
+ "maxLength": 128,
3258
+ "minLength": 8,
3259
+ "pattern": "^[A-Za-z0-9._:-]+$",
3260
+ "type": "string"
3261
+ }
3262
+ }
3263
+ ],
3264
+ "requestBody": {
3265
+ "content": {
3266
+ "application/json": {
3267
+ "schema": {
3268
+ "$ref": "#/components/schemas/CreateEnvironment"
3269
+ }
3270
+ }
3271
+ },
3272
+ "required": true
3273
+ },
3274
+ "responses": {
3275
+ "200": {
3276
+ "content": {
3277
+ "application/json": {
3278
+ "schema": {
3279
+ "$ref": "#/components/schemas/Environment"
3280
+ }
3281
+ }
3282
+ },
3283
+ "description": "The environment an earlier request with this Idempotency-Key created, as it is now"
3284
+ },
3285
+ "202": {
3286
+ "content": {
3287
+ "application/json": {
3288
+ "schema": {
3289
+ "$ref": "#/components/schemas/Environment"
3290
+ }
3291
+ }
3292
+ },
3293
+ "description": "Environment starting"
3294
+ },
3295
+ "400": {
3296
+ "content": {
3297
+ "application/json": {
3298
+ "schema": {
3299
+ "$ref": "#/components/schemas/Error"
3300
+ }
3301
+ }
3302
+ },
3303
+ "description": "Invalid request"
3304
+ },
3305
+ "401": {
3306
+ "content": {
3307
+ "application/json": {
3308
+ "schema": {
3309
+ "$ref": "#/components/schemas/Error"
3310
+ }
3311
+ }
3312
+ },
3313
+ "description": "Authentication required"
3314
+ },
3315
+ "403": {
3316
+ "content": {
3317
+ "application/json": {
3318
+ "schema": {
3319
+ "$ref": "#/components/schemas/Error"
3320
+ }
3321
+ }
3322
+ },
3323
+ "description": "Permission denied"
3324
+ },
3325
+ "404": {
3326
+ "content": {
3327
+ "application/json": {
3328
+ "schema": {
3329
+ "$ref": "#/components/schemas/Error"
3330
+ }
3331
+ }
3332
+ },
3333
+ "description": "Resource not found"
3334
+ },
3335
+ "409": {
3336
+ "content": {
3337
+ "application/json": {
3338
+ "schema": {
3339
+ "$ref": "#/components/schemas/Error"
3340
+ }
3341
+ }
3342
+ },
3343
+ "description": "Conflicting request"
3344
+ },
3345
+ "413": {
3346
+ "content": {
3347
+ "application/json": {
3348
+ "schema": {
3349
+ "$ref": "#/components/schemas/Error"
3350
+ }
3351
+ }
3352
+ },
3353
+ "description": "Request body too large"
3354
+ },
3355
+ "422": {
3356
+ "content": {
3357
+ "application/json": {
3358
+ "schema": {
3359
+ "$ref": "#/components/schemas/Error"
3360
+ }
3361
+ }
3362
+ },
3363
+ "description": "Version unavailable"
3364
+ },
3365
+ "429": {
3366
+ "content": {
3367
+ "application/json": {
3368
+ "schema": {
3369
+ "$ref": "#/components/schemas/Error"
3370
+ }
3371
+ }
3372
+ },
3373
+ "description": "Limit reached"
3374
+ },
3375
+ "500": {
3376
+ "content": {
3377
+ "application/json": {
3378
+ "schema": {
3379
+ "$ref": "#/components/schemas/Error"
3380
+ }
3381
+ }
3382
+ },
3383
+ "description": "Unexpected failure"
3384
+ },
3385
+ "503": {
3386
+ "content": {
3387
+ "application/json": {
3388
+ "schema": {
3389
+ "$ref": "#/components/schemas/Error"
3390
+ }
3391
+ }
3392
+ },
3393
+ "description": "Dependency unavailable"
3394
+ }
3395
+ },
3396
+ "security": [
3397
+ {
3398
+ "bearerAuth": []
3399
+ }
3400
+ ]
3401
+ }
3402
+ },
3403
+ "/v1/environments/creators": {
3404
+ "get": {
3405
+ "operationId": "listEnvironmentCreators",
3406
+ "parameters": [
3407
+ {
3408
+ "in": "query",
3409
+ "name": "workspaceId",
1983
3410
  "required": false,
1984
3411
  "schema": {
1985
- "maxLength": 2048,
3412
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1986
3413
  "type": "string"
1987
3414
  }
1988
3415
  }
@@ -1995,20 +3422,17 @@
1995
3422
  "properties": {
1996
3423
  "data": {
1997
3424
  "items": {
1998
- "$ref": "#/components/schemas/Version"
3425
+ "$ref": "#/components/schemas/Principal"
1999
3426
  },
2000
3427
  "type": "array"
2001
- },
2002
- "nextCursor": {
2003
- "type": ["string", "null"]
2004
3428
  }
2005
3429
  },
2006
- "required": ["data", "nextCursor"],
3430
+ "required": ["data"],
2007
3431
  "type": "object"
2008
3432
  }
2009
3433
  }
2010
3434
  },
2011
- "description": "The app's published versions, newest first"
3435
+ "description": "Each principal that created an environment in the workspace, by name"
2012
3436
  },
2013
3437
  "400": {
2014
3438
  "content": {
@@ -2118,45 +3542,27 @@
2118
3542
  ]
2119
3543
  }
2120
3544
  },
2121
- "/v1/audit-events": {
2122
- "get": {
2123
- "operationId": "listAuditEvents",
3545
+ "/v1/environments/{environmentId}": {
3546
+ "delete": {
3547
+ "operationId": "deleteEnvironment",
2124
3548
  "parameters": [
2125
3549
  {
2126
- "in": "query",
2127
- "name": "limit",
2128
- "required": false,
2129
- "schema": {
2130
- "default": 50,
2131
- "maximum": 100,
2132
- "minimum": 1,
2133
- "type": "integer"
2134
- }
2135
- },
2136
- {
2137
- "in": "query",
2138
- "name": "cursor",
2139
- "required": false,
2140
- "schema": {
2141
- "maxLength": 2048,
2142
- "type": "string"
2143
- }
2144
- },
2145
- {
2146
- "in": "query",
2147
- "name": "workspaceId",
2148
- "required": false,
3550
+ "in": "path",
3551
+ "name": "environmentId",
3552
+ "required": true,
2149
3553
  "schema": {
2150
3554
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2151
3555
  "type": "string"
2152
3556
  }
2153
3557
  },
2154
3558
  {
2155
- "in": "query",
2156
- "name": "environmentId",
3559
+ "in": "header",
3560
+ "name": "idempotency-key",
2157
3561
  "required": false,
2158
3562
  "schema": {
2159
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3563
+ "maxLength": 128,
3564
+ "minLength": 8,
3565
+ "pattern": "^[A-Za-z0-9._:-]+$",
2160
3566
  "type": "string"
2161
3567
  }
2162
3568
  }
@@ -2166,23 +3572,11 @@
2166
3572
  "content": {
2167
3573
  "application/json": {
2168
3574
  "schema": {
2169
- "properties": {
2170
- "data": {
2171
- "items": {
2172
- "$ref": "#/components/schemas/AuditEvent"
2173
- },
2174
- "type": "array"
2175
- },
2176
- "nextCursor": {
2177
- "type": ["string", "null"]
2178
- }
2179
- },
2180
- "required": ["data", "nextCursor"],
2181
- "type": "object"
3575
+ "$ref": "#/components/schemas/Environment"
2182
3576
  }
2183
3577
  }
2184
3578
  },
2185
- "description": "A workspace's or an environment's audit events, newest first"
3579
+ "description": "Environment deleted; compute and data are released after the response"
2186
3580
  },
2187
3581
  "400": {
2188
3582
  "content": {
@@ -2290,109 +3684,18 @@
2290
3684
  "bearerAuth": []
2291
3685
  }
2292
3686
  ]
2293
- }
2294
- },
2295
- "/v1/environments": {
3687
+ },
2296
3688
  "get": {
2297
- "operationId": "listEnvironments",
3689
+ "operationId": "getEnvironment",
2298
3690
  "parameters": [
2299
3691
  {
2300
- "in": "query",
2301
- "name": "limit",
2302
- "required": false,
2303
- "schema": {
2304
- "default": 50,
2305
- "maximum": 100,
2306
- "minimum": 1,
2307
- "type": "integer"
2308
- }
2309
- },
2310
- {
2311
- "in": "query",
2312
- "name": "cursor",
2313
- "required": false,
2314
- "schema": {
2315
- "maxLength": 2048,
2316
- "type": "string"
2317
- }
2318
- },
2319
- {
2320
- "in": "query",
2321
- "name": "workspaceId",
2322
- "required": false,
2323
- "schema": {
2324
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2325
- "type": "string"
2326
- }
2327
- },
2328
- {
2329
- "in": "query",
2330
- "name": "status",
2331
- "required": false,
2332
- "schema": {
2333
- "items": {
2334
- "$ref": "#/components/schemas/EnvironmentStatus"
2335
- },
2336
- "maxItems": 5,
2337
- "type": "array"
2338
- }
2339
- },
2340
- {
2341
- "in": "query",
2342
- "name": "appId",
2343
- "required": false,
2344
- "schema": {
2345
- "items": {
2346
- "pattern": "^[a-z][a-z0-9-]{1,39}$",
2347
- "type": "string"
2348
- },
2349
- "maxItems": 20,
2350
- "type": "array"
2351
- }
2352
- },
2353
- {
2354
- "in": "query",
2355
- "name": "createdBy",
2356
- "required": false,
2357
- "schema": {
2358
- "items": {
2359
- "pattern": "^(user_[0-9A-Za-z]+|key_[0-9a-z]{16})$",
2360
- "type": "string"
2361
- },
2362
- "maxItems": 50,
2363
- "type": "array"
2364
- }
2365
- },
2366
- {
2367
- "in": "query",
2368
- "name": "snapshotId",
2369
- "required": false,
3692
+ "in": "path",
3693
+ "name": "environmentId",
3694
+ "required": true,
2370
3695
  "schema": {
2371
3696
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2372
3697
  "type": "string"
2373
3698
  }
2374
- },
2375
- {
2376
- "in": "query",
2377
- "name": "search",
2378
- "required": false,
2379
- "schema": {
2380
- "maxLength": 120,
2381
- "type": "string"
2382
- }
2383
- },
2384
- {
2385
- "in": "query",
2386
- "name": "label",
2387
- "required": false,
2388
- "schema": {
2389
- "items": {
2390
- "pattern": "^[^=]+=.*$",
2391
- "type": "string"
2392
- },
2393
- "maxItems": 32,
2394
- "type": "array"
2395
- }
2396
3699
  }
2397
3700
  ],
2398
3701
  "responses": {
@@ -2400,23 +3703,11 @@
2400
3703
  "content": {
2401
3704
  "application/json": {
2402
3705
  "schema": {
2403
- "properties": {
2404
- "data": {
2405
- "items": {
2406
- "$ref": "#/components/schemas/Environment"
2407
- },
2408
- "type": "array"
2409
- },
2410
- "nextCursor": {
2411
- "type": ["string", "null"]
2412
- }
2413
- },
2414
- "required": ["data", "nextCursor"],
2415
- "type": "object"
3706
+ "$ref": "#/components/schemas/Environment"
2416
3707
  }
2417
3708
  }
2418
3709
  },
2419
- "description": "The workspace's environments, newest created first"
3710
+ "description": "Environment"
2420
3711
  },
2421
3712
  "400": {
2422
3713
  "content": {
@@ -2525,17 +3816,15 @@
2525
3816
  }
2526
3817
  ]
2527
3818
  },
2528
- "post": {
2529
- "operationId": "createEnvironment",
3819
+ "patch": {
3820
+ "operationId": "updateEnvironment",
2530
3821
  "parameters": [
2531
3822
  {
2532
- "in": "header",
2533
- "name": "idempotency-key",
2534
- "required": false,
3823
+ "in": "path",
3824
+ "name": "environmentId",
3825
+ "required": true,
2535
3826
  "schema": {
2536
- "maxLength": 128,
2537
- "minLength": 8,
2538
- "pattern": "^[A-Za-z0-9._:-]+$",
3827
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2539
3828
  "type": "string"
2540
3829
  }
2541
3830
  }
@@ -2544,7 +3833,21 @@
2544
3833
  "content": {
2545
3834
  "application/json": {
2546
3835
  "schema": {
2547
- "$ref": "#/components/schemas/CreateEnvironment"
3836
+ "properties": {
3837
+ "labels": {
3838
+ "additionalProperties": {
3839
+ "maxLength": 256,
3840
+ "type": "string"
3841
+ },
3842
+ "type": "object"
3843
+ },
3844
+ "name": {
3845
+ "maxLength": 120,
3846
+ "minLength": 1,
3847
+ "type": ["string", "null"]
3848
+ }
3849
+ },
3850
+ "type": "object"
2548
3851
  }
2549
3852
  }
2550
3853
  },
@@ -2559,17 +3862,7 @@
2559
3862
  }
2560
3863
  }
2561
3864
  },
2562
- "description": "The environment an earlier request with this Idempotency-Key created, as it is now"
2563
- },
2564
- "202": {
2565
- "content": {
2566
- "application/json": {
2567
- "schema": {
2568
- "$ref": "#/components/schemas/Environment"
2569
- }
2570
- }
2571
- },
2572
- "description": "Environment starting"
3865
+ "description": "Environment updated"
2573
3866
  },
2574
3867
  "400": {
2575
3868
  "content": {
@@ -2674,21 +3967,60 @@
2674
3967
  },
2675
3968
  "security": [
2676
3969
  {
2677
- "bearerAuth": []
2678
- }
2679
- ]
2680
- }
2681
- },
2682
- "/v1/environments/creators": {
2683
- "get": {
2684
- "operationId": "listEnvironmentCreators",
2685
- "parameters": [
3970
+ "bearerAuth": []
3971
+ }
3972
+ ]
3973
+ }
3974
+ },
3975
+ "/v1/environments/{environmentId}/apps/{appName}/actors": {
3976
+ "get": {
3977
+ "operationId": "listActors",
3978
+ "parameters": [
3979
+ {
3980
+ "in": "path",
3981
+ "name": "environmentId",
3982
+ "required": true,
3983
+ "schema": {
3984
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3985
+ "type": "string"
3986
+ }
3987
+ },
3988
+ {
3989
+ "in": "path",
3990
+ "name": "appName",
3991
+ "required": true,
3992
+ "schema": {
3993
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
3994
+ "type": "string"
3995
+ }
3996
+ },
3997
+ {
3998
+ "in": "query",
3999
+ "name": "limit",
4000
+ "required": false,
4001
+ "schema": {
4002
+ "default": 50,
4003
+ "maximum": 100,
4004
+ "minimum": 1,
4005
+ "type": "integer"
4006
+ }
4007
+ },
4008
+ {
4009
+ "in": "query",
4010
+ "name": "cursor",
4011
+ "required": false,
4012
+ "schema": {
4013
+ "maxLength": 2048,
4014
+ "minLength": 1,
4015
+ "type": "string"
4016
+ }
4017
+ },
2686
4018
  {
2687
4019
  "in": "query",
2688
- "name": "workspaceId",
4020
+ "name": "search",
2689
4021
  "required": false,
2690
4022
  "schema": {
2691
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4023
+ "maxLength": 320,
2692
4024
  "type": "string"
2693
4025
  }
2694
4026
  }
@@ -2701,17 +4033,20 @@
2701
4033
  "properties": {
2702
4034
  "data": {
2703
4035
  "items": {
2704
- "$ref": "#/components/schemas/Principal"
4036
+ "$ref": "#/components/schemas/AppUser"
2705
4037
  },
2706
4038
  "type": "array"
4039
+ },
4040
+ "nextCursor": {
4041
+ "type": ["string", "null"]
2707
4042
  }
2708
4043
  },
2709
- "required": ["data"],
4044
+ "required": ["data", "nextCursor"],
2710
4045
  "type": "object"
2711
4046
  }
2712
4047
  }
2713
4048
  },
2714
- "description": "Each principal that created an environment in the workspace, by name"
4049
+ "description": "The users who can act in one app of a running environment, the default user first, as the app answers them"
2715
4050
  },
2716
4051
  "400": {
2717
4052
  "content": {
@@ -2821,9 +4156,9 @@
2821
4156
  ]
2822
4157
  }
2823
4158
  },
2824
- "/v1/environments/{environmentId}": {
2825
- "delete": {
2826
- "operationId": "deleteEnvironment",
4159
+ "/v1/environments/{environmentId}/apps/{appName}/credentials": {
4160
+ "post": {
4161
+ "operationId": "createCredentials",
2827
4162
  "parameters": [
2828
4163
  {
2829
4164
  "in": "path",
@@ -2835,27 +4170,56 @@
2835
4170
  }
2836
4171
  },
2837
4172
  {
2838
- "in": "header",
2839
- "name": "idempotency-key",
2840
- "required": false,
4173
+ "in": "path",
4174
+ "name": "appName",
4175
+ "required": true,
2841
4176
  "schema": {
2842
- "maxLength": 128,
2843
- "minLength": 8,
2844
- "pattern": "^[A-Za-z0-9._:-]+$",
4177
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2845
4178
  "type": "string"
2846
4179
  }
2847
4180
  }
2848
4181
  ],
4182
+ "requestBody": {
4183
+ "content": {
4184
+ "application/json": {
4185
+ "schema": {
4186
+ "properties": {
4187
+ "actorId": {
4188
+ "deprecated": true,
4189
+ "description": "The old name of `as`. It takes the same values.",
4190
+ "maxLength": 320,
4191
+ "type": "string"
4192
+ },
4193
+ "as": {
4194
+ "description": "The user to act as: an email, a username or an ID of a user of the app. Without it, the call acts as the app's default user.",
4195
+ "maxLength": 320,
4196
+ "type": "string"
4197
+ },
4198
+ "services": {
4199
+ "items": {
4200
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4201
+ "type": "string"
4202
+ },
4203
+ "maxItems": 20,
4204
+ "type": "array"
4205
+ }
4206
+ },
4207
+ "type": "object"
4208
+ }
4209
+ }
4210
+ },
4211
+ "required": false
4212
+ },
2849
4213
  "responses": {
2850
4214
  "200": {
2851
4215
  "content": {
2852
4216
  "application/json": {
2853
4217
  "schema": {
2854
- "$ref": "#/components/schemas/Environment"
4218
+ "$ref": "#/components/schemas/Credentials"
2855
4219
  }
2856
4220
  }
2857
4221
  },
2858
- "description": "Environment deleted; compute and data are released after the response"
4222
+ "description": "How to call one app as one actor; the same tokens each time"
2859
4223
  },
2860
4224
  "400": {
2861
4225
  "content": {
@@ -2963,9 +4327,12 @@
2963
4327
  "bearerAuth": []
2964
4328
  }
2965
4329
  ]
2966
- },
2967
- "get": {
2968
- "operationId": "getEnvironment",
4330
+ }
4331
+ },
4332
+ "/v1/environments/{environmentId}/apps/{appName}/ui-sessions": {
4333
+ "post": {
4334
+ "description": "Launches a browser session of one actor in an app's UI. The answer holds a one-use grant and no reusable credential. Return it only to the browser of the user it is for, which posts the grant to `exchangeUrl` from `launcherOrigin`.",
4335
+ "operationId": "launchUiSession",
2969
4336
  "parameters": [
2970
4337
  {
2971
4338
  "in": "path",
@@ -2975,18 +4342,37 @@
2975
4342
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2976
4343
  "type": "string"
2977
4344
  }
4345
+ },
4346
+ {
4347
+ "in": "path",
4348
+ "name": "appName",
4349
+ "required": true,
4350
+ "schema": {
4351
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4352
+ "type": "string"
4353
+ }
2978
4354
  }
2979
4355
  ],
4356
+ "requestBody": {
4357
+ "content": {
4358
+ "application/json": {
4359
+ "schema": {
4360
+ "$ref": "#/components/schemas/LaunchUiSession"
4361
+ }
4362
+ }
4363
+ },
4364
+ "required": true
4365
+ },
2980
4366
  "responses": {
2981
- "200": {
4367
+ "201": {
2982
4368
  "content": {
2983
4369
  "application/json": {
2984
4370
  "schema": {
2985
- "$ref": "#/components/schemas/Environment"
4371
+ "$ref": "#/components/schemas/UiSessionLaunch"
2986
4372
  }
2987
4373
  }
2988
4374
  },
2989
- "description": "Environment"
4375
+ "description": "A pending session and its one-use grant"
2990
4376
  },
2991
4377
  "400": {
2992
4378
  "content": {
@@ -3094,9 +4480,12 @@
3094
4480
  "bearerAuth": []
3095
4481
  }
3096
4482
  ]
3097
- },
3098
- "patch": {
3099
- "operationId": "updateEnvironment",
4483
+ }
4484
+ },
4485
+ "/v1/environments/{environmentId}/apps/{appName}/ui-sessions/{sessionId}": {
4486
+ "delete": {
4487
+ "description": "Revokes a browser session that the caller's own credential launched. Revoking again answers the same result. Another credential's session is not found.",
4488
+ "operationId": "revokeUiSession",
3100
4489
  "parameters": [
3101
4490
  {
3102
4491
  "in": "path",
@@ -3106,42 +4495,36 @@
3106
4495
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3107
4496
  "type": "string"
3108
4497
  }
3109
- }
3110
- ],
3111
- "requestBody": {
3112
- "content": {
3113
- "application/json": {
3114
- "schema": {
3115
- "properties": {
3116
- "labels": {
3117
- "additionalProperties": {
3118
- "maxLength": 256,
3119
- "type": "string"
3120
- },
3121
- "type": "object"
3122
- },
3123
- "name": {
3124
- "maxLength": 120,
3125
- "minLength": 1,
3126
- "type": ["string", "null"]
3127
- }
3128
- },
3129
- "type": "object"
3130
- }
4498
+ },
4499
+ {
4500
+ "in": "path",
4501
+ "name": "appName",
4502
+ "required": true,
4503
+ "schema": {
4504
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4505
+ "type": "string"
3131
4506
  }
3132
4507
  },
3133
- "required": true
3134
- },
4508
+ {
4509
+ "in": "path",
4510
+ "name": "sessionId",
4511
+ "required": true,
4512
+ "schema": {
4513
+ "pattern": "^uis_[0-9a-z]{26}$",
4514
+ "type": "string"
4515
+ }
4516
+ }
4517
+ ],
3135
4518
  "responses": {
3136
4519
  "200": {
3137
4520
  "content": {
3138
4521
  "application/json": {
3139
4522
  "schema": {
3140
- "$ref": "#/components/schemas/Environment"
4523
+ "$ref": "#/components/schemas/UiSessionRevocation"
3141
4524
  }
3142
4525
  }
3143
4526
  },
3144
- "description": "Environment updated"
4527
+ "description": "The session is revoked"
3145
4528
  },
3146
4529
  "400": {
3147
4530
  "content": {
@@ -3251,64 +4634,74 @@
3251
4634
  ]
3252
4635
  }
3253
4636
  },
3254
- "/v1/environments/{environmentId}/apps/{appName}/credentials": {
3255
- "post": {
3256
- "operationId": "createCredentials",
4637
+ "/v1/imports": {
4638
+ "get": {
4639
+ "operationId": "listImports",
3257
4640
  "parameters": [
3258
4641
  {
3259
- "in": "path",
3260
- "name": "environmentId",
3261
- "required": true,
4642
+ "in": "query",
4643
+ "name": "limit",
4644
+ "required": false,
3262
4645
  "schema": {
3263
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4646
+ "default": 50,
4647
+ "maximum": 100,
4648
+ "minimum": 1,
4649
+ "type": "integer"
4650
+ }
4651
+ },
4652
+ {
4653
+ "in": "query",
4654
+ "name": "cursor",
4655
+ "required": false,
4656
+ "schema": {
4657
+ "maxLength": 2048,
3264
4658
  "type": "string"
3265
4659
  }
3266
4660
  },
3267
4661
  {
3268
- "in": "path",
3269
- "name": "appName",
3270
- "required": true,
4662
+ "in": "query",
4663
+ "name": "workspaceId",
4664
+ "required": false,
3271
4665
  "schema": {
3272
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
4666
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3273
4667
  "type": "string"
3274
4668
  }
4669
+ },
4670
+ {
4671
+ "in": "query",
4672
+ "name": "status",
4673
+ "required": false,
4674
+ "schema": {
4675
+ "items": {
4676
+ "$ref": "#/components/schemas/ImportStatus"
4677
+ },
4678
+ "maxItems": 4,
4679
+ "type": "array"
4680
+ }
3275
4681
  }
3276
4682
  ],
3277
- "requestBody": {
3278
- "content": {
3279
- "application/json": {
3280
- "schema": {
3281
- "properties": {
3282
- "actorId": {
3283
- "maxLength": 255,
3284
- "minLength": 1,
3285
- "type": "string"
3286
- },
3287
- "services": {
3288
- "items": {
3289
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
3290
- "type": "string"
3291
- },
3292
- "maxItems": 20,
3293
- "type": "array"
3294
- }
3295
- },
3296
- "type": "object"
3297
- }
3298
- }
3299
- },
3300
- "required": false
3301
- },
3302
4683
  "responses": {
3303
4684
  "200": {
3304
4685
  "content": {
3305
4686
  "application/json": {
3306
4687
  "schema": {
3307
- "$ref": "#/components/schemas/Credentials"
4688
+ "properties": {
4689
+ "data": {
4690
+ "items": {
4691
+ "$ref": "#/components/schemas/Import"
4692
+ },
4693
+ "type": "array"
4694
+ },
4695
+ "nextCursor": {
4696
+ "type": ["string", "null"]
4697
+ }
4698
+ },
4699
+ "required": ["data", "nextCursor"],
4700
+ "type": "object"
3308
4701
  }
3309
4702
  }
3310
4703
  },
3311
- "description": "How to call one app as one actor; the same tokens each time"
4704
+ "description": "The workspace's imports, newest first"
3312
4705
  },
3313
4706
  "400": {
3314
4707
  "content": {
@@ -3416,28 +4809,18 @@
3416
4809
  "bearerAuth": []
3417
4810
  }
3418
4811
  ]
3419
- }
3420
- },
3421
- "/v1/environments/{environmentId}/apps/{appName}/ui-sessions": {
4812
+ },
3422
4813
  "post": {
3423
- "description": "Launches a browser session of one actor in an app's UI. The answer holds a one-use grant and no reusable credential. Return it only to the browser of the user it is for, which posts the grant to `exchangeUrl` from `launcherOrigin`.",
3424
- "operationId": "launchUiSession",
4814
+ "operationId": "createImport",
3425
4815
  "parameters": [
3426
4816
  {
3427
- "in": "path",
3428
- "name": "environmentId",
3429
- "required": true,
3430
- "schema": {
3431
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3432
- "type": "string"
3433
- }
3434
- },
3435
- {
3436
- "in": "path",
3437
- "name": "appName",
3438
- "required": true,
4817
+ "in": "header",
4818
+ "name": "idempotency-key",
4819
+ "required": false,
3439
4820
  "schema": {
3440
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
4821
+ "maxLength": 128,
4822
+ "minLength": 8,
4823
+ "pattern": "^[A-Za-z0-9._:-]+$",
3441
4824
  "type": "string"
3442
4825
  }
3443
4826
  }
@@ -3446,22 +4829,51 @@
3446
4829
  "content": {
3447
4830
  "application/json": {
3448
4831
  "schema": {
3449
- "$ref": "#/components/schemas/LaunchUiSession"
4832
+ "properties": {
4833
+ "digest": {
4834
+ "description": "`sha256:` and the lowercase hex SHA-256 of the zip file. The check refuses a zip file with another digest.",
4835
+ "pattern": "^sha256:[0-9a-f]{64}$",
4836
+ "type": "string"
4837
+ },
4838
+ "sizeBytes": {
4839
+ "description": "The size of the zip file in bytes. The upload URL takes exactly this many bytes.",
4840
+ "maximum": 67108864,
4841
+ "minimum": 1,
4842
+ "type": "integer"
4843
+ },
4844
+ "workspaceId": {
4845
+ "description": "The import's workspace. A member must send it. An API key's own workspace is the default.",
4846
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4847
+ "type": "string"
4848
+ }
4849
+ },
4850
+ "required": ["sizeBytes", "digest"],
4851
+ "type": "object"
3450
4852
  }
3451
4853
  }
3452
4854
  },
3453
4855
  "required": true
3454
4856
  },
3455
4857
  "responses": {
4858
+ "200": {
4859
+ "content": {
4860
+ "application/json": {
4861
+ "schema": {
4862
+ "$ref": "#/components/schemas/CreatedImport"
4863
+ }
4864
+ }
4865
+ },
4866
+ "description": "The import an earlier request with this Idempotency-Key created, as it is now, with a new upload URL while it is `uploading`"
4867
+ },
3456
4868
  "201": {
3457
4869
  "content": {
3458
4870
  "application/json": {
3459
4871
  "schema": {
3460
- "$ref": "#/components/schemas/UiSessionLaunch"
4872
+ "$ref": "#/components/schemas/CreatedImport"
3461
4873
  }
3462
4874
  }
3463
4875
  },
3464
- "description": "A pending session and its one-use grant"
4876
+ "description": "Import created; send its zip file to the upload URL, then complete it"
3465
4877
  },
3466
4878
  "400": {
3467
4879
  "content": {
@@ -3571,37 +4983,18 @@
3571
4983
  ]
3572
4984
  }
3573
4985
  },
3574
- "/v1/environments/{environmentId}/apps/{appName}/ui-sessions/{sessionId}": {
4986
+ "/v1/imports/{importId}": {
3575
4987
  "delete": {
3576
- "description": "Revokes a browser session that the caller's own credential launched. Revoking again answers the same result. Another credential's session is not found.",
3577
- "operationId": "revokeUiSession",
4988
+ "operationId": "deleteImport",
3578
4989
  "parameters": [
3579
4990
  {
3580
4991
  "in": "path",
3581
- "name": "environmentId",
4992
+ "name": "importId",
3582
4993
  "required": true,
3583
4994
  "schema": {
3584
4995
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3585
4996
  "type": "string"
3586
4997
  }
3587
- },
3588
- {
3589
- "in": "path",
3590
- "name": "appName",
3591
- "required": true,
3592
- "schema": {
3593
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
3594
- "type": "string"
3595
- }
3596
- },
3597
- {
3598
- "in": "path",
3599
- "name": "sessionId",
3600
- "required": true,
3601
- "schema": {
3602
- "pattern": "^uis_[0-9a-z]{26}$",
3603
- "type": "string"
3604
- }
3605
4998
  }
3606
4999
  ],
3607
5000
  "responses": {
@@ -3609,11 +5002,11 @@
3609
5002
  "content": {
3610
5003
  "application/json": {
3611
5004
  "schema": {
3612
- "$ref": "#/components/schemas/UiSessionRevocation"
5005
+ "$ref": "#/components/schemas/Import"
3613
5006
  }
3614
5007
  }
3615
5008
  },
3616
- "description": "The session is revoked"
5009
+ "description": "Import deleted, with its problems cleared and its zip file removed"
3617
5010
  },
3618
5011
  "400": {
3619
5012
  "content": {
@@ -3721,52 +5114,18 @@
3721
5114
  "bearerAuth": []
3722
5115
  }
3723
5116
  ]
3724
- }
3725
- },
3726
- "/v1/imports": {
5117
+ },
3727
5118
  "get": {
3728
- "operationId": "listImports",
5119
+ "operationId": "getImport",
3729
5120
  "parameters": [
3730
5121
  {
3731
- "in": "query",
3732
- "name": "limit",
3733
- "required": false,
3734
- "schema": {
3735
- "default": 50,
3736
- "maximum": 100,
3737
- "minimum": 1,
3738
- "type": "integer"
3739
- }
3740
- },
3741
- {
3742
- "in": "query",
3743
- "name": "cursor",
3744
- "required": false,
3745
- "schema": {
3746
- "maxLength": 2048,
3747
- "type": "string"
3748
- }
3749
- },
3750
- {
3751
- "in": "query",
3752
- "name": "workspaceId",
3753
- "required": false,
5122
+ "in": "path",
5123
+ "name": "importId",
5124
+ "required": true,
3754
5125
  "schema": {
3755
5126
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3756
5127
  "type": "string"
3757
5128
  }
3758
- },
3759
- {
3760
- "in": "query",
3761
- "name": "status",
3762
- "required": false,
3763
- "schema": {
3764
- "items": {
3765
- "$ref": "#/components/schemas/ImportStatus"
3766
- },
3767
- "maxItems": 4,
3768
- "type": "array"
3769
- }
3770
5129
  }
3771
5130
  ],
3772
5131
  "responses": {
@@ -3774,23 +5133,11 @@
3774
5133
  "content": {
3775
5134
  "application/json": {
3776
5135
  "schema": {
3777
- "properties": {
3778
- "data": {
3779
- "items": {
3780
- "$ref": "#/components/schemas/Import"
3781
- },
3782
- "type": "array"
3783
- },
3784
- "nextCursor": {
3785
- "type": ["string", "null"]
3786
- }
3787
- },
3788
- "required": ["data", "nextCursor"],
3789
- "type": "object"
5136
+ "$ref": "#/components/schemas/Import"
3790
5137
  }
3791
5138
  }
3792
5139
  },
3793
- "description": "The workspace's imports, newest first"
5140
+ "description": "Import"
3794
5141
  },
3795
5142
  "400": {
3796
5143
  "content": {
@@ -3898,71 +5245,32 @@
3898
5245
  "bearerAuth": []
3899
5246
  }
3900
5247
  ]
3901
- },
5248
+ }
5249
+ },
5250
+ "/v1/imports/{importId}/complete": {
3902
5251
  "post": {
3903
- "operationId": "createImport",
5252
+ "operationId": "completeImport",
3904
5253
  "parameters": [
3905
5254
  {
3906
- "in": "header",
3907
- "name": "idempotency-key",
3908
- "required": false,
5255
+ "in": "path",
5256
+ "name": "importId",
5257
+ "required": true,
3909
5258
  "schema": {
3910
- "maxLength": 128,
3911
- "minLength": 8,
3912
- "pattern": "^[A-Za-z0-9._:-]+$",
5259
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3913
5260
  "type": "string"
3914
5261
  }
3915
5262
  }
3916
5263
  ],
3917
- "requestBody": {
3918
- "content": {
3919
- "application/json": {
3920
- "schema": {
3921
- "properties": {
3922
- "digest": {
3923
- "description": "`sha256:` and the lowercase hex SHA-256 of the zip file. The check refuses a zip file with another digest.",
3924
- "pattern": "^sha256:[0-9a-f]{64}$",
3925
- "type": "string"
3926
- },
3927
- "sizeBytes": {
3928
- "description": "The size of the zip file in bytes. The upload URL takes exactly this many bytes.",
3929
- "maximum": 67108864,
3930
- "minimum": 1,
3931
- "type": "integer"
3932
- },
3933
- "workspaceId": {
3934
- "description": "The import's workspace. A member must send it. An API key's own workspace is the default.",
3935
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3936
- "type": "string"
3937
- }
3938
- },
3939
- "required": ["sizeBytes", "digest"],
3940
- "type": "object"
3941
- }
3942
- }
3943
- },
3944
- "required": true
3945
- },
3946
5264
  "responses": {
3947
5265
  "200": {
3948
5266
  "content": {
3949
5267
  "application/json": {
3950
5268
  "schema": {
3951
- "$ref": "#/components/schemas/CreatedImport"
3952
- }
3953
- }
3954
- },
3955
- "description": "The import an earlier request with this Idempotency-Key created, as it is now, with a new upload URL while it is `uploading`"
3956
- },
3957
- "201": {
3958
- "content": {
3959
- "application/json": {
3960
- "schema": {
3961
- "$ref": "#/components/schemas/CreatedImport"
5269
+ "$ref": "#/components/schemas/Import"
3962
5270
  }
3963
5271
  }
3964
5272
  },
3965
- "description": "Import created; send its zip file to the upload URL, then complete it"
5273
+ "description": "The import after its check, which runs each app's own check on the app's part, as a build of a snapshot does: `ready`, or `invalid` with its problems"
3966
5274
  },
3967
5275
  "400": {
3968
5276
  "content": {
@@ -4072,9 +5380,9 @@
4072
5380
  ]
4073
5381
  }
4074
5382
  },
4075
- "/v1/imports/{importId}": {
4076
- "delete": {
4077
- "operationId": "deleteImport",
5383
+ "/v1/imports/{importId}/file": {
5384
+ "get": {
5385
+ "operationId": "getImportFile",
4078
5386
  "parameters": [
4079
5387
  {
4080
5388
  "in": "path",
@@ -4084,6 +5392,16 @@
4084
5392
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4085
5393
  "type": "string"
4086
5394
  }
5395
+ },
5396
+ {
5397
+ "in": "query",
5398
+ "name": "path",
5399
+ "required": true,
5400
+ "schema": {
5401
+ "maxLength": 65535,
5402
+ "minLength": 1,
5403
+ "type": "string"
5404
+ }
4087
5405
  }
4088
5406
  ],
4089
5407
  "responses": {
@@ -4091,11 +5409,11 @@
4091
5409
  "content": {
4092
5410
  "application/json": {
4093
5411
  "schema": {
4094
- "$ref": "#/components/schemas/Import"
5412
+ "$ref": "#/components/schemas/ImportFile"
4095
5413
  }
4096
5414
  }
4097
5415
  },
4098
- "description": "Import deleted, with its problems cleared and its zip file removed"
5416
+ "description": "A bounded preview of an original file; a truncated prefix does not verify the full file CRC"
4099
5417
  },
4100
5418
  "400": {
4101
5419
  "content": {
@@ -4203,9 +5521,11 @@
4203
5521
  "bearerAuth": []
4204
5522
  }
4205
5523
  ]
4206
- },
5524
+ }
5525
+ },
5526
+ "/v1/imports/{importId}/files": {
4207
5527
  "get": {
4208
- "operationId": "getImport",
5528
+ "operationId": "listImportFiles",
4209
5529
  "parameters": [
4210
5530
  {
4211
5531
  "in": "path",
@@ -4215,6 +5535,25 @@
4215
5535
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4216
5536
  "type": "string"
4217
5537
  }
5538
+ },
5539
+ {
5540
+ "in": "query",
5541
+ "name": "path",
5542
+ "required": false,
5543
+ "schema": {
5544
+ "default": "",
5545
+ "maxLength": 65535,
5546
+ "type": "string"
5547
+ }
5548
+ },
5549
+ {
5550
+ "in": "query",
5551
+ "name": "cursor",
5552
+ "required": false,
5553
+ "schema": {
5554
+ "maxLength": 2048,
5555
+ "type": "string"
5556
+ }
4218
5557
  }
4219
5558
  ],
4220
5559
  "responses": {
@@ -4222,11 +5561,11 @@
4222
5561
  "content": {
4223
5562
  "application/json": {
4224
5563
  "schema": {
4225
- "$ref": "#/components/schemas/Import"
5564
+ "$ref": "#/components/schemas/ImportFolder"
4226
5565
  }
4227
5566
  }
4228
5567
  },
4229
- "description": "Import"
5568
+ "description": "Immediate folder entries in the original upload, or an unavailable source"
4230
5569
  },
4231
5570
  "400": {
4232
5571
  "content": {
@@ -4336,9 +5675,9 @@
4336
5675
  ]
4337
5676
  }
4338
5677
  },
4339
- "/v1/imports/{importId}/complete": {
4340
- "post": {
4341
- "operationId": "completeImport",
5678
+ "/v1/imports/{importId}/upload": {
5679
+ "put": {
5680
+ "operationId": "uploadImport",
4342
5681
  "parameters": [
4343
5682
  {
4344
5683
  "in": "path",
@@ -4350,16 +5689,27 @@
4350
5689
  }
4351
5690
  }
4352
5691
  ],
5692
+ "requestBody": {
5693
+ "content": {
5694
+ "application/zip": {
5695
+ "schema": {
5696
+ "format": "binary",
5697
+ "type": "string"
5698
+ }
5699
+ }
5700
+ },
5701
+ "required": true
5702
+ },
4353
5703
  "responses": {
4354
5704
  "200": {
4355
5705
  "content": {
4356
5706
  "application/json": {
4357
5707
  "schema": {
4358
- "$ref": "#/components/schemas/Import"
5708
+ "$ref": "#/components/schemas/ReceivedImport"
4359
5709
  }
4360
5710
  }
4361
5711
  },
4362
- "description": "The import after the check of its zip file: `ready`, or `invalid` with its problems"
5712
+ "description": "ZIP received; complete the import to check it"
4363
5713
  },
4364
5714
  "400": {
4365
5715
  "content": {
@@ -5501,7 +6851,7 @@
5501
6851
  "properties": {
5502
6852
  "data": {
5503
6853
  "items": {
5504
- "$ref": "#/components/schemas/Snapshot"
6854
+ "$ref": "#/components/schemas/SnapshotListItem"
5505
6855
  },
5506
6856
  "type": "array"
5507
6857
  },
@@ -5514,7 +6864,7 @@
5514
6864
  }
5515
6865
  }
5516
6866
  },
5517
- "description": "The workspace's snapshots, newest first"
6867
+ "description": "The workspace's snapshots, newest first, each app's load with its counts only"
5518
6868
  },
5519
6869
  "400": {
5520
6870
  "content": {