@forge-dashboard/sdk-node 1.1.0 → 2.0.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.
- package/README.md +2 -0
- package/dist/client.d.ts +41 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +35 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +25 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/schema.d.ts +3756 -0
- package/dist/generated/schema.d.ts.map +1 -0
- package/dist/generated/schema.js +6 -0
- package/dist/generated/schema.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/retry.d.ts +26 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +94 -0
- package/dist/retry.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,3756 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by openapi-typescript.
|
|
3
|
+
* Do not make direct changes to the file.
|
|
4
|
+
*/
|
|
5
|
+
export interface paths {
|
|
6
|
+
"/api/auth/registration-status": {
|
|
7
|
+
parameters: {
|
|
8
|
+
query?: never;
|
|
9
|
+
header?: never;
|
|
10
|
+
path?: never;
|
|
11
|
+
cookie?: never;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Whether self-registration is open
|
|
15
|
+
* @description Unauthenticated — a visitor deciding whether to show the login
|
|
16
|
+
* page's own "Register a new passkey instead" button has no session
|
|
17
|
+
* yet by definition. `open` is true only on a fresh instance with
|
|
18
|
+
* zero registered users; once any account exists, self-registration
|
|
19
|
+
* is closed and every registration after that requires a valid
|
|
20
|
+
* `inviteToken` (see POST /api/auth/register/begin).
|
|
21
|
+
*/
|
|
22
|
+
get: operations["getRegistrationStatus"];
|
|
23
|
+
put?: never;
|
|
24
|
+
post?: never;
|
|
25
|
+
delete?: never;
|
|
26
|
+
options?: never;
|
|
27
|
+
head?: never;
|
|
28
|
+
patch?: never;
|
|
29
|
+
trace?: never;
|
|
30
|
+
};
|
|
31
|
+
"/api/auth/register/begin": {
|
|
32
|
+
parameters: {
|
|
33
|
+
query?: never;
|
|
34
|
+
header?: never;
|
|
35
|
+
path?: never;
|
|
36
|
+
cookie?: never;
|
|
37
|
+
};
|
|
38
|
+
get?: never;
|
|
39
|
+
put?: never;
|
|
40
|
+
/**
|
|
41
|
+
* Start a passkey registration ceremony
|
|
42
|
+
* @description The very first registration on a fresh instance (zero registered
|
|
43
|
+
* users — see GET /api/auth/registration-status) needs no
|
|
44
|
+
* `inviteToken` and bootstraps that account as admin. Every
|
|
45
|
+
* registration after that requires a valid, unexpired, unconsumed
|
|
46
|
+
* `inviteToken` issued by an admin (POST /api/admin/invites) for
|
|
47
|
+
* exactly this `username` — the invite's own `displayName` is what's
|
|
48
|
+
* actually used, not this request's.
|
|
49
|
+
*/
|
|
50
|
+
post: operations["beginRegistration"];
|
|
51
|
+
delete?: never;
|
|
52
|
+
options?: never;
|
|
53
|
+
head?: never;
|
|
54
|
+
patch?: never;
|
|
55
|
+
trace?: never;
|
|
56
|
+
};
|
|
57
|
+
"/api/auth/register/finish": {
|
|
58
|
+
parameters: {
|
|
59
|
+
query?: never;
|
|
60
|
+
header?: never;
|
|
61
|
+
path?: never;
|
|
62
|
+
cookie?: never;
|
|
63
|
+
};
|
|
64
|
+
get?: never;
|
|
65
|
+
put?: never;
|
|
66
|
+
/** Complete a passkey registration ceremony */
|
|
67
|
+
post: operations["finishRegistration"];
|
|
68
|
+
delete?: never;
|
|
69
|
+
options?: never;
|
|
70
|
+
head?: never;
|
|
71
|
+
patch?: never;
|
|
72
|
+
trace?: never;
|
|
73
|
+
};
|
|
74
|
+
"/api/auth/login/begin": {
|
|
75
|
+
parameters: {
|
|
76
|
+
query?: never;
|
|
77
|
+
header?: never;
|
|
78
|
+
path?: never;
|
|
79
|
+
cookie?: never;
|
|
80
|
+
};
|
|
81
|
+
get?: never;
|
|
82
|
+
put?: never;
|
|
83
|
+
/** Start a passkey login ceremony */
|
|
84
|
+
post: operations["beginLogin"];
|
|
85
|
+
delete?: never;
|
|
86
|
+
options?: never;
|
|
87
|
+
head?: never;
|
|
88
|
+
patch?: never;
|
|
89
|
+
trace?: never;
|
|
90
|
+
};
|
|
91
|
+
"/api/auth/login/finish": {
|
|
92
|
+
parameters: {
|
|
93
|
+
query?: never;
|
|
94
|
+
header?: never;
|
|
95
|
+
path?: never;
|
|
96
|
+
cookie?: never;
|
|
97
|
+
};
|
|
98
|
+
get?: never;
|
|
99
|
+
put?: never;
|
|
100
|
+
/** Complete a passkey login ceremony */
|
|
101
|
+
post: operations["finishLogin"];
|
|
102
|
+
delete?: never;
|
|
103
|
+
options?: never;
|
|
104
|
+
head?: never;
|
|
105
|
+
patch?: never;
|
|
106
|
+
trace?: never;
|
|
107
|
+
};
|
|
108
|
+
"/api/auth/logout": {
|
|
109
|
+
parameters: {
|
|
110
|
+
query?: never;
|
|
111
|
+
header?: never;
|
|
112
|
+
path?: never;
|
|
113
|
+
cookie?: never;
|
|
114
|
+
};
|
|
115
|
+
get?: never;
|
|
116
|
+
put?: never;
|
|
117
|
+
/** End the current session */
|
|
118
|
+
post: operations["logout"];
|
|
119
|
+
delete?: never;
|
|
120
|
+
options?: never;
|
|
121
|
+
head?: never;
|
|
122
|
+
patch?: never;
|
|
123
|
+
trace?: never;
|
|
124
|
+
};
|
|
125
|
+
"/api/auth/session": {
|
|
126
|
+
parameters: {
|
|
127
|
+
query?: never;
|
|
128
|
+
header?: never;
|
|
129
|
+
path?: never;
|
|
130
|
+
cookie?: never;
|
|
131
|
+
};
|
|
132
|
+
/** Who, if anyone, the current session cookie belongs to */
|
|
133
|
+
get: operations["getSession"];
|
|
134
|
+
put?: never;
|
|
135
|
+
post?: never;
|
|
136
|
+
delete?: never;
|
|
137
|
+
options?: never;
|
|
138
|
+
head?: never;
|
|
139
|
+
patch?: never;
|
|
140
|
+
trace?: never;
|
|
141
|
+
};
|
|
142
|
+
"/api/auth/credentials": {
|
|
143
|
+
parameters: {
|
|
144
|
+
query?: never;
|
|
145
|
+
header?: never;
|
|
146
|
+
path?: never;
|
|
147
|
+
cookie?: never;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* List the signed-in user's own passkeys
|
|
151
|
+
* @description Every passkey on the account (#355), oldest first — not just the
|
|
152
|
+
* one used to establish the current session.
|
|
153
|
+
*/
|
|
154
|
+
get: operations["listCredentials"];
|
|
155
|
+
put?: never;
|
|
156
|
+
post?: never;
|
|
157
|
+
delete?: never;
|
|
158
|
+
options?: never;
|
|
159
|
+
head?: never;
|
|
160
|
+
patch?: never;
|
|
161
|
+
trace?: never;
|
|
162
|
+
};
|
|
163
|
+
"/api/auth/credentials/begin": {
|
|
164
|
+
parameters: {
|
|
165
|
+
query?: never;
|
|
166
|
+
header?: never;
|
|
167
|
+
path?: never;
|
|
168
|
+
cookie?: never;
|
|
169
|
+
};
|
|
170
|
+
get?: never;
|
|
171
|
+
put?: never;
|
|
172
|
+
/**
|
|
173
|
+
* Start a ceremony to add another passkey to the signed-in account
|
|
174
|
+
* @description The authenticated counterpart to POST /api/auth/register/begin —
|
|
175
|
+
* that one only ever works for a brand-new, credential-less
|
|
176
|
+
* account; this is how an already-registered user adds a second
|
|
177
|
+
* (or third...) passkey, e.g. a laptop and a security key (#355).
|
|
178
|
+
*/
|
|
179
|
+
post: operations["beginAddCredential"];
|
|
180
|
+
delete?: never;
|
|
181
|
+
options?: never;
|
|
182
|
+
head?: never;
|
|
183
|
+
patch?: never;
|
|
184
|
+
trace?: never;
|
|
185
|
+
};
|
|
186
|
+
"/api/auth/credentials/finish": {
|
|
187
|
+
parameters: {
|
|
188
|
+
query?: never;
|
|
189
|
+
header?: never;
|
|
190
|
+
path?: never;
|
|
191
|
+
cookie?: never;
|
|
192
|
+
};
|
|
193
|
+
get?: never;
|
|
194
|
+
put?: never;
|
|
195
|
+
/** Complete an add-credential ceremony */
|
|
196
|
+
post: operations["finishAddCredential"];
|
|
197
|
+
delete?: never;
|
|
198
|
+
options?: never;
|
|
199
|
+
head?: never;
|
|
200
|
+
patch?: never;
|
|
201
|
+
trace?: never;
|
|
202
|
+
};
|
|
203
|
+
"/api/auth/credentials/{id}": {
|
|
204
|
+
parameters: {
|
|
205
|
+
query?: never;
|
|
206
|
+
header?: never;
|
|
207
|
+
path?: never;
|
|
208
|
+
cookie?: never;
|
|
209
|
+
};
|
|
210
|
+
get?: never;
|
|
211
|
+
put?: never;
|
|
212
|
+
post?: never;
|
|
213
|
+
/**
|
|
214
|
+
* Remove one of the signed-in user's own passkeys
|
|
215
|
+
* @description Refused on the account's last remaining passkey (#355) — this
|
|
216
|
+
* app is WebAuthn-only with no password fallback, so deleting it
|
|
217
|
+
* would lock the account out entirely.
|
|
218
|
+
*/
|
|
219
|
+
delete: operations["deleteCredential"];
|
|
220
|
+
options?: never;
|
|
221
|
+
head?: never;
|
|
222
|
+
patch?: never;
|
|
223
|
+
trace?: never;
|
|
224
|
+
};
|
|
225
|
+
"/api/settings": {
|
|
226
|
+
parameters: {
|
|
227
|
+
query?: never;
|
|
228
|
+
header?: never;
|
|
229
|
+
path?: never;
|
|
230
|
+
cookie?: never;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* The signed-in user's own forge configuration
|
|
234
|
+
* @description Tokens are never returned, before or after being saved — only
|
|
235
|
+
* whether one is currently on file. There is no way to read a saved
|
|
236
|
+
* token back out through this API.
|
|
237
|
+
*/
|
|
238
|
+
get: operations["getSettings"];
|
|
239
|
+
/**
|
|
240
|
+
* Save the signed-in user's forge configuration
|
|
241
|
+
* @description Replaces every field except a blank token, which means "keep
|
|
242
|
+
* whatever's already saved" rather than "clear it" — the only
|
|
243
|
+
* sensible behavior for a field the browser is never shown the
|
|
244
|
+
* current value of. Saving triggers that user's dashboard to start
|
|
245
|
+
* refreshing from the new configuration.
|
|
246
|
+
*/
|
|
247
|
+
put: operations["putSettings"];
|
|
248
|
+
post?: never;
|
|
249
|
+
delete?: never;
|
|
250
|
+
options?: never;
|
|
251
|
+
head?: never;
|
|
252
|
+
patch?: never;
|
|
253
|
+
trace?: never;
|
|
254
|
+
};
|
|
255
|
+
"/api/settings/bot-pr-updates": {
|
|
256
|
+
parameters: {
|
|
257
|
+
query?: never;
|
|
258
|
+
header?: never;
|
|
259
|
+
path?: never;
|
|
260
|
+
cookie?: never;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* Whether bot-managed pull request branches can be updated
|
|
264
|
+
* @description A lightweight, side-effect-free read of one field —
|
|
265
|
+
* allowBotPrUpdates — for the dashboard page to check on every
|
|
266
|
+
* load. Deliberately not GET /api/settings itself: that handler
|
|
267
|
+
* also provisions webhook credentials on first call
|
|
268
|
+
* (EnsureWebhookCredentials), which the dashboard visiting on a
|
|
269
|
+
* user's behalf shouldn't trigger for someone who's never opened
|
|
270
|
+
* Settings at all.
|
|
271
|
+
*/
|
|
272
|
+
get: operations["getBotPrUpdatesSetting"];
|
|
273
|
+
put?: never;
|
|
274
|
+
post?: never;
|
|
275
|
+
delete?: never;
|
|
276
|
+
options?: never;
|
|
277
|
+
head?: never;
|
|
278
|
+
patch?: never;
|
|
279
|
+
trace?: never;
|
|
280
|
+
};
|
|
281
|
+
"/api/settings/theme": {
|
|
282
|
+
parameters: {
|
|
283
|
+
query?: never;
|
|
284
|
+
header?: never;
|
|
285
|
+
path?: never;
|
|
286
|
+
cookie?: never;
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* The signed-in user's own saved theme preference
|
|
290
|
+
* @description A lightweight, side-effect-free read of one field — theme — for
|
|
291
|
+
* every page to check on load (#352). The same "deliberately not
|
|
292
|
+
* GET /api/settings itself" restraint GET /api/settings/bot-pr-updates
|
|
293
|
+
* already uses, for the same reason: this loads on every page visit
|
|
294
|
+
* and shouldn't provision webhook credentials as a side effect.
|
|
295
|
+
*/
|
|
296
|
+
get: operations["getTheme"];
|
|
297
|
+
/**
|
|
298
|
+
* Save the signed-in user's own theme preference
|
|
299
|
+
* @description A dedicated, instant save (#352) — deliberately not routed
|
|
300
|
+
* through the main PUT /api/settings, whose every other field is
|
|
301
|
+
* a plain replace rather than a per-field merge: a request
|
|
302
|
+
* carrying only theme through that handler would blank every
|
|
303
|
+
* other saved setting. Picking a theme applies immediately, the
|
|
304
|
+
* same "set once and forget" convention the ticket's own research
|
|
305
|
+
* cites, rather than waiting on the rest of the settings form's
|
|
306
|
+
* own Save button.
|
|
307
|
+
*/
|
|
308
|
+
put: operations["setTheme"];
|
|
309
|
+
post?: never;
|
|
310
|
+
delete?: never;
|
|
311
|
+
options?: never;
|
|
312
|
+
head?: never;
|
|
313
|
+
patch?: never;
|
|
314
|
+
trace?: never;
|
|
315
|
+
};
|
|
316
|
+
"/api/settings/filter-state": {
|
|
317
|
+
parameters: {
|
|
318
|
+
query?: never;
|
|
319
|
+
header?: never;
|
|
320
|
+
path?: never;
|
|
321
|
+
cookie?: never;
|
|
322
|
+
};
|
|
323
|
+
/**
|
|
324
|
+
* The signed-in user's own saved dashboard/Insights filter state
|
|
325
|
+
* @description A lightweight read of one opaque blob (#353), the same
|
|
326
|
+
* "deliberately not GET /api/settings itself" restraint
|
|
327
|
+
* GET /api/settings/bot-pr-updates already uses, for the same
|
|
328
|
+
* reason: this loads on every dashboard/Insights visit and
|
|
329
|
+
* shouldn't provision webhook credentials as a side effect.
|
|
330
|
+
* `{}` for a user who's never saved any filters yet, not a 404.
|
|
331
|
+
*/
|
|
332
|
+
get: operations["getFilterState"];
|
|
333
|
+
/**
|
|
334
|
+
* Save the signed-in user's own dashboard/Insights filter state
|
|
335
|
+
* @description A dedicated, lightweight save separate from the main
|
|
336
|
+
* PUT /api/settings — filters change on nearly every click, a
|
|
337
|
+
* mismatch for that endpoint's "always a full form submit"
|
|
338
|
+
* convention (#353). The body replaces the saved state entirely,
|
|
339
|
+
* the same "always a full submit, just of a much smaller and
|
|
340
|
+
* much more frequent thing" shape as the main settings PUT, not a
|
|
341
|
+
* partial patch. Filters.js's own client-side code decides when
|
|
342
|
+
* to call this: immediately for a discrete control, debounced
|
|
343
|
+
* while the user is still typing in the free-text Title filter.
|
|
344
|
+
*/
|
|
345
|
+
put: operations["setFilterState"];
|
|
346
|
+
post?: never;
|
|
347
|
+
delete?: never;
|
|
348
|
+
options?: never;
|
|
349
|
+
head?: never;
|
|
350
|
+
patch?: never;
|
|
351
|
+
trace?: never;
|
|
352
|
+
};
|
|
353
|
+
"/api/tokens": {
|
|
354
|
+
parameters: {
|
|
355
|
+
query?: never;
|
|
356
|
+
header?: never;
|
|
357
|
+
path?: never;
|
|
358
|
+
cookie?: never;
|
|
359
|
+
};
|
|
360
|
+
/**
|
|
361
|
+
* List the signed-in user's own personal API tokens
|
|
362
|
+
* @description Metadata only, per APIToken's own description — a raw value never reappears once created.
|
|
363
|
+
*/
|
|
364
|
+
get: operations["listAPITokens"];
|
|
365
|
+
put?: never;
|
|
366
|
+
/** Generate a new personal API token */
|
|
367
|
+
post: operations["createAPIToken"];
|
|
368
|
+
delete?: never;
|
|
369
|
+
options?: never;
|
|
370
|
+
head?: never;
|
|
371
|
+
patch?: never;
|
|
372
|
+
trace?: never;
|
|
373
|
+
};
|
|
374
|
+
"/api/tokens/{id}": {
|
|
375
|
+
parameters: {
|
|
376
|
+
query?: never;
|
|
377
|
+
header?: never;
|
|
378
|
+
path?: never;
|
|
379
|
+
cookie?: never;
|
|
380
|
+
};
|
|
381
|
+
get?: never;
|
|
382
|
+
put?: never;
|
|
383
|
+
post?: never;
|
|
384
|
+
/**
|
|
385
|
+
* Revoke a personal API token
|
|
386
|
+
* @description Stops the token authenticating immediately. Idempotent — deleting
|
|
387
|
+
* an id that's already gone (or never belonged to the signed-in
|
|
388
|
+
* user) still answers 204, the same as any other delete-by-id
|
|
389
|
+
* endpoint here (compare DELETE /api/sharing/{username}), so a
|
|
390
|
+
* double-click or a retried request isn't an error.
|
|
391
|
+
*/
|
|
392
|
+
delete: operations["deleteAPIToken"];
|
|
393
|
+
options?: never;
|
|
394
|
+
head?: never;
|
|
395
|
+
patch?: never;
|
|
396
|
+
trace?: never;
|
|
397
|
+
};
|
|
398
|
+
"/api/webhooks/ensure": {
|
|
399
|
+
parameters: {
|
|
400
|
+
query?: never;
|
|
401
|
+
header?: never;
|
|
402
|
+
path?: never;
|
|
403
|
+
cookie?: never;
|
|
404
|
+
};
|
|
405
|
+
get?: never;
|
|
406
|
+
put?: never;
|
|
407
|
+
/**
|
|
408
|
+
* Create or fix up a webhook on one tracked repo, on the signed-in user's behalf
|
|
409
|
+
* @description Creates a webhook on the named repo, pointed at the signed-in
|
|
410
|
+
* user's own webhook URL and secret, subscribed to the events
|
|
411
|
+
* docs/webhooks.md's manual steps recommend. If one already exists
|
|
412
|
+
* there (found the same way GET /api/dashboard's own `hasWebhook`
|
|
413
|
+
* does — matching by URL path, not object identity) it's brought
|
|
414
|
+
* back to active with the right events instead of creating a
|
|
415
|
+
* duplicate.
|
|
416
|
+
*
|
|
417
|
+
* One of a small number of endpoints in this API that write to a
|
|
418
|
+
* forge rather than just reading from it — see also the
|
|
419
|
+
* pull-requests tag.
|
|
420
|
+
*/
|
|
421
|
+
post: operations["ensureWebhook"];
|
|
422
|
+
delete?: never;
|
|
423
|
+
options?: never;
|
|
424
|
+
head?: never;
|
|
425
|
+
patch?: never;
|
|
426
|
+
trace?: never;
|
|
427
|
+
};
|
|
428
|
+
"/api/repos/ignore": {
|
|
429
|
+
parameters: {
|
|
430
|
+
query?: never;
|
|
431
|
+
header?: never;
|
|
432
|
+
path?: never;
|
|
433
|
+
cookie?: never;
|
|
434
|
+
};
|
|
435
|
+
get?: never;
|
|
436
|
+
put?: never;
|
|
437
|
+
/**
|
|
438
|
+
* Hide one tracked repo's pull requests, issues, or both from the dashboard and Insights
|
|
439
|
+
* @description Reversible, not destructive (#363): the repo itself keeps
|
|
440
|
+
* appearing in GET /api/dashboard's `repos` array with accurate
|
|
441
|
+
* webhook-coverage status, and keeps being fetched and counted —
|
|
442
|
+
* only the pullRequests and/or issues entries the request scopes
|
|
443
|
+
* (#511) stop appearing there and on Insights. A repeat call
|
|
444
|
+
* replaces the previously saved scope rather than merging with it
|
|
445
|
+
* (ignoring PRs only, then issues only, ends with only issues
|
|
446
|
+
* ignored) — idempotent for an identical repeat, not additive
|
|
447
|
+
* across different scopes.
|
|
448
|
+
*/
|
|
449
|
+
post: operations["ignoreRepo"];
|
|
450
|
+
delete?: never;
|
|
451
|
+
options?: never;
|
|
452
|
+
head?: never;
|
|
453
|
+
patch?: never;
|
|
454
|
+
trace?: never;
|
|
455
|
+
};
|
|
456
|
+
"/api/repos/unignore": {
|
|
457
|
+
parameters: {
|
|
458
|
+
query?: never;
|
|
459
|
+
header?: never;
|
|
460
|
+
path?: never;
|
|
461
|
+
cookie?: never;
|
|
462
|
+
};
|
|
463
|
+
get?: never;
|
|
464
|
+
put?: never;
|
|
465
|
+
/**
|
|
466
|
+
* Stop ignoring one tracked repo
|
|
467
|
+
* @description The reverse of POST /api/repos/ignore. Idempotent: un-ignoring a
|
|
468
|
+
* repo that was never ignored is a no-op, not an error.
|
|
469
|
+
*/
|
|
470
|
+
post: operations["unignoreRepo"];
|
|
471
|
+
delete?: never;
|
|
472
|
+
options?: never;
|
|
473
|
+
head?: never;
|
|
474
|
+
patch?: never;
|
|
475
|
+
trace?: never;
|
|
476
|
+
};
|
|
477
|
+
"/api/repos/auto-update-branch/enable": {
|
|
478
|
+
parameters: {
|
|
479
|
+
query?: never;
|
|
480
|
+
header?: never;
|
|
481
|
+
path?: never;
|
|
482
|
+
cookie?: never;
|
|
483
|
+
};
|
|
484
|
+
get?: never;
|
|
485
|
+
put?: never;
|
|
486
|
+
/**
|
|
487
|
+
* Turn on automatic branch updates for one tracked repo
|
|
488
|
+
* @description Any of this repo's pull requests the background refresh finds
|
|
489
|
+
* behind its base branch gets updated automatically from then on
|
|
490
|
+
* (#365), the same as clicking "Update branch" would — suppressed
|
|
491
|
+
* for a bot-managed pull request unless bot-PR updates are
|
|
492
|
+
* separately allowed. Idempotent: enabling an already-enabled repo
|
|
493
|
+
* is a no-op, not an error.
|
|
494
|
+
*/
|
|
495
|
+
post: operations["enableAutoUpdateBranch"];
|
|
496
|
+
delete?: never;
|
|
497
|
+
options?: never;
|
|
498
|
+
head?: never;
|
|
499
|
+
patch?: never;
|
|
500
|
+
trace?: never;
|
|
501
|
+
};
|
|
502
|
+
"/api/repos/auto-update-branch/disable": {
|
|
503
|
+
parameters: {
|
|
504
|
+
query?: never;
|
|
505
|
+
header?: never;
|
|
506
|
+
path?: never;
|
|
507
|
+
cookie?: never;
|
|
508
|
+
};
|
|
509
|
+
get?: never;
|
|
510
|
+
put?: never;
|
|
511
|
+
/**
|
|
512
|
+
* Turn off automatic branch updates for one tracked repo
|
|
513
|
+
* @description The reverse of POST /api/repos/auto-update-branch/enable.
|
|
514
|
+
* Idempotent: disabling a repo that was never enabled is a no-op,
|
|
515
|
+
* not an error.
|
|
516
|
+
*/
|
|
517
|
+
post: operations["disableAutoUpdateBranch"];
|
|
518
|
+
delete?: never;
|
|
519
|
+
options?: never;
|
|
520
|
+
head?: never;
|
|
521
|
+
patch?: never;
|
|
522
|
+
trace?: never;
|
|
523
|
+
};
|
|
524
|
+
"/api/pull-requests/merge": {
|
|
525
|
+
parameters: {
|
|
526
|
+
query?: never;
|
|
527
|
+
header?: never;
|
|
528
|
+
path?: never;
|
|
529
|
+
cookie?: never;
|
|
530
|
+
};
|
|
531
|
+
get?: never;
|
|
532
|
+
put?: never;
|
|
533
|
+
/**
|
|
534
|
+
* Merge one pull request, on the signed-in user's behalf
|
|
535
|
+
* @description Merges the named pull request using its repo's own configured
|
|
536
|
+
* default merge method — GitHub is asked to pick its own repo
|
|
537
|
+
* default; Forgejo's API has no such default built in, so this
|
|
538
|
+
* looks up the repo's configured default merge style first and
|
|
539
|
+
* passes that explicitly. Neither takes a method override here;
|
|
540
|
+
* picking one is out of scope for this endpoint.
|
|
541
|
+
*/
|
|
542
|
+
post: operations["mergePullRequest"];
|
|
543
|
+
delete?: never;
|
|
544
|
+
options?: never;
|
|
545
|
+
head?: never;
|
|
546
|
+
patch?: never;
|
|
547
|
+
trace?: never;
|
|
548
|
+
};
|
|
549
|
+
"/api/pull-requests/close": {
|
|
550
|
+
parameters: {
|
|
551
|
+
query?: never;
|
|
552
|
+
header?: never;
|
|
553
|
+
path?: never;
|
|
554
|
+
cookie?: never;
|
|
555
|
+
};
|
|
556
|
+
get?: never;
|
|
557
|
+
put?: never;
|
|
558
|
+
/**
|
|
559
|
+
* Close one pull request without merging it, on the signed-in user's behalf
|
|
560
|
+
* @description Closes the named pull request — for one that turns out not to
|
|
561
|
+
* need merging at all (a duplicate, or one whose content already
|
|
562
|
+
* landed another way), not a substitute for Merge.
|
|
563
|
+
*/
|
|
564
|
+
post: operations["closePullRequest"];
|
|
565
|
+
delete?: never;
|
|
566
|
+
options?: never;
|
|
567
|
+
head?: never;
|
|
568
|
+
patch?: never;
|
|
569
|
+
trace?: never;
|
|
570
|
+
};
|
|
571
|
+
"/api/pull-requests/update-branch": {
|
|
572
|
+
parameters: {
|
|
573
|
+
query?: never;
|
|
574
|
+
header?: never;
|
|
575
|
+
path?: never;
|
|
576
|
+
cookie?: never;
|
|
577
|
+
};
|
|
578
|
+
get?: never;
|
|
579
|
+
put?: never;
|
|
580
|
+
/**
|
|
581
|
+
* Bring one pull request's branch up to date with its base, on the signed-in user's behalf
|
|
582
|
+
* @description Merges the named pull request's base branch into its own head
|
|
583
|
+
* branch. GitHub can schedule this as a background job rather than
|
|
584
|
+
* finishing it inline — a 202 here means exactly that, not a
|
|
585
|
+
* failure; a follow-up refresh a moment later reflects the result.
|
|
586
|
+
* Forgejo's equivalent is always synchronous, so it only ever
|
|
587
|
+
* answers 204.
|
|
588
|
+
*/
|
|
589
|
+
post: operations["updatePullRequestBranch"];
|
|
590
|
+
delete?: never;
|
|
591
|
+
options?: never;
|
|
592
|
+
head?: never;
|
|
593
|
+
patch?: never;
|
|
594
|
+
trace?: never;
|
|
595
|
+
};
|
|
596
|
+
"/api/pull-requests/dependabot-action": {
|
|
597
|
+
parameters: {
|
|
598
|
+
query?: never;
|
|
599
|
+
header?: never;
|
|
600
|
+
path?: never;
|
|
601
|
+
cookie?: never;
|
|
602
|
+
};
|
|
603
|
+
get?: never;
|
|
604
|
+
put?: never;
|
|
605
|
+
/**
|
|
606
|
+
* Post one of Dependabot's own documented PR-comment commands on a pull request, on the signed-in user's behalf
|
|
607
|
+
* @description Posts exactly `@dependabot rebase` or `@dependabot recreate` as a
|
|
608
|
+
* comment on the named pull request — Dependabot's own documented
|
|
609
|
+
* comment-command interface, not a generic "post any comment"
|
|
610
|
+
* endpoint; `action` is validated server-side to one of the two
|
|
611
|
+
* values below and nothing else is ever sent. GitHub only —
|
|
612
|
+
* Dependabot doesn't run on Forgejo.
|
|
613
|
+
*/
|
|
614
|
+
post: operations["postPullRequestDependabotAction"];
|
|
615
|
+
delete?: never;
|
|
616
|
+
options?: never;
|
|
617
|
+
head?: never;
|
|
618
|
+
patch?: never;
|
|
619
|
+
trace?: never;
|
|
620
|
+
};
|
|
621
|
+
"/api/pull-requests/renovate-rebase": {
|
|
622
|
+
parameters: {
|
|
623
|
+
query?: never;
|
|
624
|
+
header?: never;
|
|
625
|
+
path?: never;
|
|
626
|
+
cookie?: never;
|
|
627
|
+
};
|
|
628
|
+
get?: never;
|
|
629
|
+
put?: never;
|
|
630
|
+
/**
|
|
631
|
+
* Trigger Renovate's own rebase/retry on a pull request, on the signed-in user's behalf
|
|
632
|
+
* @description Adds the signed-in user's own configured Renovate rebase label
|
|
633
|
+
* (Settings' "Renovate rebase label" field, defaulting to
|
|
634
|
+
* Renovate's own `rebase` if left blank) to the named pull
|
|
635
|
+
* request — Renovate's own documented rebase/retry trigger, which
|
|
636
|
+
* is a label rather than a comment command. Works on both GitHub
|
|
637
|
+
* and Forgejo, unlike the Dependabot actions, since Renovate runs
|
|
638
|
+
* on both.
|
|
639
|
+
*/
|
|
640
|
+
post: operations["postPullRequestRenovateRebase"];
|
|
641
|
+
delete?: never;
|
|
642
|
+
options?: never;
|
|
643
|
+
head?: never;
|
|
644
|
+
patch?: never;
|
|
645
|
+
trace?: never;
|
|
646
|
+
};
|
|
647
|
+
"/api/pull-requests/checks": {
|
|
648
|
+
parameters: {
|
|
649
|
+
query?: never;
|
|
650
|
+
header?: never;
|
|
651
|
+
path?: never;
|
|
652
|
+
cookie?: never;
|
|
653
|
+
};
|
|
654
|
+
/**
|
|
655
|
+
* List every job/check run against a pull request's head commit, on demand
|
|
656
|
+
* @description Fetched live on every call, never as part of GET /api/dashboard's
|
|
657
|
+
* own snapshot — this is detail a pull request's row doesn't show
|
|
658
|
+
* until a caller actually asks for it, and adding it to the eager
|
|
659
|
+
* refresh loop would multiply that refresh's cost by every open
|
|
660
|
+
* pull request for data most of them are never opened for.
|
|
661
|
+
*
|
|
662
|
+
* Falls back to the legacy combined commit-status API's own
|
|
663
|
+
* per-check entries when the forge reports no Actions runs at all
|
|
664
|
+
* for that commit (Actions disabled, or an instance too old to
|
|
665
|
+
* expose them) — never an error for that case specifically, since
|
|
666
|
+
* it's a normal, expected shape for an older or CI-less repo.
|
|
667
|
+
*/
|
|
668
|
+
get: operations["getPullRequestChecks"];
|
|
669
|
+
put?: never;
|
|
670
|
+
post?: never;
|
|
671
|
+
delete?: never;
|
|
672
|
+
options?: never;
|
|
673
|
+
head?: never;
|
|
674
|
+
patch?: never;
|
|
675
|
+
trace?: never;
|
|
676
|
+
};
|
|
677
|
+
"/api/admin/users": {
|
|
678
|
+
parameters: {
|
|
679
|
+
query?: never;
|
|
680
|
+
header?: never;
|
|
681
|
+
path?: never;
|
|
682
|
+
cookie?: never;
|
|
683
|
+
};
|
|
684
|
+
/**
|
|
685
|
+
* List every registered user
|
|
686
|
+
* @description Never includes a passkey or a forge credential — a username,
|
|
687
|
+
* display name, admin flag and registration timestamp per user.
|
|
688
|
+
*/
|
|
689
|
+
get: operations["listUsers"];
|
|
690
|
+
put?: never;
|
|
691
|
+
post?: never;
|
|
692
|
+
delete?: never;
|
|
693
|
+
options?: never;
|
|
694
|
+
head?: never;
|
|
695
|
+
patch?: never;
|
|
696
|
+
trace?: never;
|
|
697
|
+
};
|
|
698
|
+
"/api/admin/users/{username}/revoke": {
|
|
699
|
+
parameters: {
|
|
700
|
+
query?: never;
|
|
701
|
+
header?: never;
|
|
702
|
+
path?: never;
|
|
703
|
+
cookie?: never;
|
|
704
|
+
};
|
|
705
|
+
get?: never;
|
|
706
|
+
put?: never;
|
|
707
|
+
/**
|
|
708
|
+
* Revoke a user's passkeys and sessions
|
|
709
|
+
* @description Deletes every session and every registered passkey for this user —
|
|
710
|
+
* they're signed out everywhere immediately, and have to register a
|
|
711
|
+
* new passkey from scratch to get back in. Their saved forge
|
|
712
|
+
* credentials are untouched; use the delete endpoint to remove the
|
|
713
|
+
* account itself.
|
|
714
|
+
*/
|
|
715
|
+
post: operations["revokeUser"];
|
|
716
|
+
delete?: never;
|
|
717
|
+
options?: never;
|
|
718
|
+
head?: never;
|
|
719
|
+
patch?: never;
|
|
720
|
+
trace?: never;
|
|
721
|
+
};
|
|
722
|
+
"/api/admin/users/{username}": {
|
|
723
|
+
parameters: {
|
|
724
|
+
query?: never;
|
|
725
|
+
header?: never;
|
|
726
|
+
path?: never;
|
|
727
|
+
cookie?: never;
|
|
728
|
+
};
|
|
729
|
+
get?: never;
|
|
730
|
+
put?: never;
|
|
731
|
+
post?: never;
|
|
732
|
+
/**
|
|
733
|
+
* Remove a user outright
|
|
734
|
+
* @description Deletes the account, every session, every registered passkey, and
|
|
735
|
+
* every saved forge credential — irreversible. Their username
|
|
736
|
+
* becomes available for a fresh registration.
|
|
737
|
+
*/
|
|
738
|
+
delete: operations["deleteUser"];
|
|
739
|
+
options?: never;
|
|
740
|
+
head?: never;
|
|
741
|
+
patch?: never;
|
|
742
|
+
trace?: never;
|
|
743
|
+
};
|
|
744
|
+
"/api/admin/invites": {
|
|
745
|
+
parameters: {
|
|
746
|
+
query?: never;
|
|
747
|
+
header?: never;
|
|
748
|
+
path?: never;
|
|
749
|
+
cookie?: never;
|
|
750
|
+
};
|
|
751
|
+
/**
|
|
752
|
+
* List outstanding registration invites
|
|
753
|
+
* @description Every invite that's neither consumed nor expired — never the raw
|
|
754
|
+
* token, only its own stable id (see AdminInvite).
|
|
755
|
+
*/
|
|
756
|
+
get: operations["listInvites"];
|
|
757
|
+
put?: never;
|
|
758
|
+
/**
|
|
759
|
+
* Generate a new single-use registration invite
|
|
760
|
+
* @description The admin picks the username and display name up front — the
|
|
761
|
+
* invitee only completes the WebAuthn ceremony at the link this
|
|
762
|
+
* returns (`/login?invite=<token>`, built client-side). Valid for
|
|
763
|
+
* one hour, fixed.
|
|
764
|
+
*/
|
|
765
|
+
post: operations["createInvite"];
|
|
766
|
+
delete?: never;
|
|
767
|
+
options?: never;
|
|
768
|
+
head?: never;
|
|
769
|
+
patch?: never;
|
|
770
|
+
trace?: never;
|
|
771
|
+
};
|
|
772
|
+
"/api/admin/invites/{token}/revoke": {
|
|
773
|
+
parameters: {
|
|
774
|
+
query?: never;
|
|
775
|
+
header?: never;
|
|
776
|
+
path?: never;
|
|
777
|
+
cookie?: never;
|
|
778
|
+
};
|
|
779
|
+
get?: never;
|
|
780
|
+
put?: never;
|
|
781
|
+
/**
|
|
782
|
+
* Revoke an outstanding invite
|
|
783
|
+
* @description Stops the invite's token from ever completing a registration.
|
|
784
|
+
* `token` here is an invite's own `id` (from AdminInvite's own
|
|
785
|
+
* listing), never the raw secret an invitee would use to register —
|
|
786
|
+
* that's AdminInviteCreateResponse's own `token` field, and it's
|
|
787
|
+
* never listed again after creation.
|
|
788
|
+
*/
|
|
789
|
+
post: operations["revokeInvite"];
|
|
790
|
+
delete?: never;
|
|
791
|
+
options?: never;
|
|
792
|
+
head?: never;
|
|
793
|
+
patch?: never;
|
|
794
|
+
trace?: never;
|
|
795
|
+
};
|
|
796
|
+
"/healthz": {
|
|
797
|
+
parameters: {
|
|
798
|
+
query?: never;
|
|
799
|
+
header?: never;
|
|
800
|
+
path?: never;
|
|
801
|
+
cookie?: never;
|
|
802
|
+
};
|
|
803
|
+
/**
|
|
804
|
+
* Liveness
|
|
805
|
+
* @description Answers 200 once the server has started. Doesn't reflect whether
|
|
806
|
+
* either forge is reachable — see forges[].reachable on the dashboard
|
|
807
|
+
* response for that.
|
|
808
|
+
*/
|
|
809
|
+
get: operations["health"];
|
|
810
|
+
put?: never;
|
|
811
|
+
post?: never;
|
|
812
|
+
delete?: never;
|
|
813
|
+
options?: never;
|
|
814
|
+
head?: never;
|
|
815
|
+
patch?: never;
|
|
816
|
+
trace?: never;
|
|
817
|
+
};
|
|
818
|
+
"/api/version": {
|
|
819
|
+
parameters: {
|
|
820
|
+
query?: never;
|
|
821
|
+
header?: never;
|
|
822
|
+
path?: never;
|
|
823
|
+
cookie?: never;
|
|
824
|
+
};
|
|
825
|
+
/**
|
|
826
|
+
* The running server's own version
|
|
827
|
+
* @description The tag goreleaser stamped the running binary with ("dev" for a
|
|
828
|
+
* build outside the release pipeline). Public and unauthenticated —
|
|
829
|
+
* every page, including the pre-login screen, links to the matching
|
|
830
|
+
* GitHub release from its footer so a person can tell what's
|
|
831
|
+
* actually deployed without shelling into the box.
|
|
832
|
+
*/
|
|
833
|
+
get: operations["getVersion"];
|
|
834
|
+
put?: never;
|
|
835
|
+
post?: never;
|
|
836
|
+
delete?: never;
|
|
837
|
+
options?: never;
|
|
838
|
+
head?: never;
|
|
839
|
+
patch?: never;
|
|
840
|
+
trace?: never;
|
|
841
|
+
};
|
|
842
|
+
"/api/dashboard": {
|
|
843
|
+
parameters: {
|
|
844
|
+
query?: never;
|
|
845
|
+
header?: never;
|
|
846
|
+
path?: never;
|
|
847
|
+
cookie?: never;
|
|
848
|
+
};
|
|
849
|
+
/**
|
|
850
|
+
* The aggregated view
|
|
851
|
+
* @description Returns the most recently fetched snapshot. The backend refreshes
|
|
852
|
+
* this on its own schedule in the background; this endpoint never
|
|
853
|
+
* blocks on a live call to either forge, so it answers instantly even
|
|
854
|
+
* when a forge is slow or unreachable.
|
|
855
|
+
*
|
|
856
|
+
* Omitting `owner` returns the signed-in user's own dashboard. Passing
|
|
857
|
+
* it returns that user's dashboard instead — allowed only when they've
|
|
858
|
+
* shared it with the caller (or the caller is viewing their own
|
|
859
|
+
* username), and refused with a 403 otherwise.
|
|
860
|
+
*/
|
|
861
|
+
get: operations["getDashboard"];
|
|
862
|
+
put?: never;
|
|
863
|
+
post?: never;
|
|
864
|
+
delete?: never;
|
|
865
|
+
options?: never;
|
|
866
|
+
head?: never;
|
|
867
|
+
patch?: never;
|
|
868
|
+
trace?: never;
|
|
869
|
+
};
|
|
870
|
+
"/api/dashboard/stream": {
|
|
871
|
+
parameters: {
|
|
872
|
+
query?: never;
|
|
873
|
+
header?: never;
|
|
874
|
+
path?: never;
|
|
875
|
+
cookie?: never;
|
|
876
|
+
};
|
|
877
|
+
/**
|
|
878
|
+
* Server-Sent Events stream of the signed-in user's own dashboard
|
|
879
|
+
* @description Pushes a fresh snapshot every time this user's background
|
|
880
|
+
* refresh produces one — most notably right after a verified
|
|
881
|
+
* webhook delivery (see the webhooks tag) triggers an immediate
|
|
882
|
+
* one, which is what turns that into a live update instead of
|
|
883
|
+
* something only the next scheduled refresh picks up.
|
|
884
|
+
*
|
|
885
|
+
* Doesn't support `owner` the way GET /api/dashboard does — only
|
|
886
|
+
* ever the signed-in user's own dashboard, never a shared one.
|
|
887
|
+
* The frontend's own 30-second poll against GET /api/dashboard
|
|
888
|
+
* keeps running unconditionally, connected or not — a browser or
|
|
889
|
+
* proxy that can't hold an SSE connection open just never
|
|
890
|
+
* benefits from this, rather than the dashboard going stale
|
|
891
|
+
* silently.
|
|
892
|
+
*/
|
|
893
|
+
get: operations["streamDashboard"];
|
|
894
|
+
put?: never;
|
|
895
|
+
post?: never;
|
|
896
|
+
delete?: never;
|
|
897
|
+
options?: never;
|
|
898
|
+
head?: never;
|
|
899
|
+
patch?: never;
|
|
900
|
+
trace?: never;
|
|
901
|
+
};
|
|
902
|
+
"/api/dashboard/refresh": {
|
|
903
|
+
parameters: {
|
|
904
|
+
query?: never;
|
|
905
|
+
header?: never;
|
|
906
|
+
path?: never;
|
|
907
|
+
cookie?: never;
|
|
908
|
+
};
|
|
909
|
+
get?: never;
|
|
910
|
+
put?: never;
|
|
911
|
+
/**
|
|
912
|
+
* Trigger an immediate refresh of the signed-in user's own dashboard
|
|
913
|
+
* @description Blocks until an immediate, out-of-band refresh of the signed-in
|
|
914
|
+
* user's own dashboard completes, then returns the resulting
|
|
915
|
+
* snapshot — for retrying right away after a forge was only
|
|
916
|
+
* briefly unreachable, instead of waiting for the next scheduled
|
|
917
|
+
* background refresh.
|
|
918
|
+
*
|
|
919
|
+
* Doesn't support `owner` the way GET /api/dashboard does — only
|
|
920
|
+
* ever the signed-in user's own dashboard, never a shared one, so
|
|
921
|
+
* a user with shared access to someone else's dashboard can never
|
|
922
|
+
* spend that owner's own forge rate-limit budget on their own
|
|
923
|
+
* schedule.
|
|
924
|
+
*/
|
|
925
|
+
post: operations["refreshDashboard"];
|
|
926
|
+
delete?: never;
|
|
927
|
+
options?: never;
|
|
928
|
+
head?: never;
|
|
929
|
+
patch?: never;
|
|
930
|
+
trace?: never;
|
|
931
|
+
};
|
|
932
|
+
"/api/sharing": {
|
|
933
|
+
parameters: {
|
|
934
|
+
query?: never;
|
|
935
|
+
header?: never;
|
|
936
|
+
path?: never;
|
|
937
|
+
cookie?: never;
|
|
938
|
+
};
|
|
939
|
+
/**
|
|
940
|
+
* The signed-in user's sharing relationships
|
|
941
|
+
* @description Both directions at once: who the signed-in user has shared their
|
|
942
|
+
* own dashboard with, and whose dashboards have been shared with
|
|
943
|
+
* them.
|
|
944
|
+
*/
|
|
945
|
+
get: operations["getSharing"];
|
|
946
|
+
put?: never;
|
|
947
|
+
post?: never;
|
|
948
|
+
delete?: never;
|
|
949
|
+
options?: never;
|
|
950
|
+
head?: never;
|
|
951
|
+
patch?: never;
|
|
952
|
+
trace?: never;
|
|
953
|
+
};
|
|
954
|
+
"/api/sharing/{username}": {
|
|
955
|
+
parameters: {
|
|
956
|
+
query?: never;
|
|
957
|
+
header?: never;
|
|
958
|
+
path?: never;
|
|
959
|
+
cookie?: never;
|
|
960
|
+
};
|
|
961
|
+
get?: never;
|
|
962
|
+
/**
|
|
963
|
+
* Share the signed-in user's dashboard with username
|
|
964
|
+
* @description Idempotent — sharing with a username already on the list changes
|
|
965
|
+
* nothing. username needs no tokens of their own configured to view
|
|
966
|
+
* the shared dashboard; they see the owner's aggregated data exactly
|
|
967
|
+
* as the owner sees it.
|
|
968
|
+
*/
|
|
969
|
+
put: operations["shareWith"];
|
|
970
|
+
post?: never;
|
|
971
|
+
/**
|
|
972
|
+
* Stop sharing the signed-in user's dashboard with username
|
|
973
|
+
* @description Idempotent — removing a username that was never shared with changes nothing.
|
|
974
|
+
*/
|
|
975
|
+
delete: operations["unshareWith"];
|
|
976
|
+
options?: never;
|
|
977
|
+
head?: never;
|
|
978
|
+
patch?: never;
|
|
979
|
+
trace?: never;
|
|
980
|
+
};
|
|
981
|
+
"/api/webhooks/github/{webhookToken}": {
|
|
982
|
+
parameters: {
|
|
983
|
+
query?: never;
|
|
984
|
+
header?: never;
|
|
985
|
+
path?: never;
|
|
986
|
+
cookie?: never;
|
|
987
|
+
};
|
|
988
|
+
get?: never;
|
|
989
|
+
put?: never;
|
|
990
|
+
/**
|
|
991
|
+
* Receive a GitHub repository webhook delivery
|
|
992
|
+
* @description Triggers an immediate refresh for the user webhookToken identifies,
|
|
993
|
+
* once the request's `X-Hub-Signature-256` header is verified against
|
|
994
|
+
* that user's webhook secret. Every delivery GitHub can send for a
|
|
995
|
+
* repository webhook (a new pull request, a closed issue, a status or
|
|
996
|
+
* check-run update, even the `ping` event GitHub sends when the
|
|
997
|
+
* webhook is first created) means the same thing here — something
|
|
998
|
+
* changed, refresh — so nothing about the payload itself is parsed.
|
|
999
|
+
*/
|
|
1000
|
+
post: operations["receiveGitHubWebhook"];
|
|
1001
|
+
delete?: never;
|
|
1002
|
+
options?: never;
|
|
1003
|
+
head?: never;
|
|
1004
|
+
patch?: never;
|
|
1005
|
+
trace?: never;
|
|
1006
|
+
};
|
|
1007
|
+
"/api/webhooks/forgejo/{webhookToken}": {
|
|
1008
|
+
parameters: {
|
|
1009
|
+
query?: never;
|
|
1010
|
+
header?: never;
|
|
1011
|
+
path?: never;
|
|
1012
|
+
cookie?: never;
|
|
1013
|
+
};
|
|
1014
|
+
get?: never;
|
|
1015
|
+
put?: never;
|
|
1016
|
+
/**
|
|
1017
|
+
* Receive a Forgejo repository webhook delivery
|
|
1018
|
+
* @description Triggers an immediate refresh for the user webhookToken identifies,
|
|
1019
|
+
* once the request's signature header is verified against that
|
|
1020
|
+
* user's webhook secret — `X-Forgejo-Signature` on a webhook set up
|
|
1021
|
+
* with the "Forgejo" type, `X-Gitea-Signature` on one set up with the
|
|
1022
|
+
* legacy "Gitea" type; both carry the same raw hex HMAC-SHA256. Every
|
|
1023
|
+
* delivery means the same thing here — something changed, refresh —
|
|
1024
|
+
* so nothing about the payload itself is parsed.
|
|
1025
|
+
*/
|
|
1026
|
+
post: operations["receiveForgejoWebhook"];
|
|
1027
|
+
delete?: never;
|
|
1028
|
+
options?: never;
|
|
1029
|
+
head?: never;
|
|
1030
|
+
patch?: never;
|
|
1031
|
+
trace?: never;
|
|
1032
|
+
};
|
|
1033
|
+
}
|
|
1034
|
+
export type webhooks = Record<string, never>;
|
|
1035
|
+
export interface components {
|
|
1036
|
+
schemas: {
|
|
1037
|
+
Health: {
|
|
1038
|
+
/** @constant */
|
|
1039
|
+
status: "ok";
|
|
1040
|
+
};
|
|
1041
|
+
Version: {
|
|
1042
|
+
/**
|
|
1043
|
+
* @description The release tag this binary was built from, with no leading
|
|
1044
|
+
* "v" — or "dev" for a build outside the release pipeline.
|
|
1045
|
+
* @example 0.12.1
|
|
1046
|
+
* @example dev
|
|
1047
|
+
*/
|
|
1048
|
+
version: string;
|
|
1049
|
+
};
|
|
1050
|
+
Error: {
|
|
1051
|
+
error: string;
|
|
1052
|
+
};
|
|
1053
|
+
RegisterBeginRequest: {
|
|
1054
|
+
/** @example ryan */
|
|
1055
|
+
username: string;
|
|
1056
|
+
/**
|
|
1057
|
+
* @description Ignored once an invite is required (any account already
|
|
1058
|
+
* exists) — the invite's own displayName (set by the admin who
|
|
1059
|
+
* issued it) is what's actually used. Only the very first,
|
|
1060
|
+
* bootstrap registration on a fresh instance takes this value.
|
|
1061
|
+
* @example Ryan
|
|
1062
|
+
*/
|
|
1063
|
+
displayName: string;
|
|
1064
|
+
/**
|
|
1065
|
+
* @description Required once any account already exists (see GET
|
|
1066
|
+
* /api/auth/registration-status) — a single-use token from POST
|
|
1067
|
+
* /api/admin/invites, issued for exactly this username. Omitted
|
|
1068
|
+
* or ignored for the very first, bootstrap registration.
|
|
1069
|
+
*/
|
|
1070
|
+
inviteToken?: string;
|
|
1071
|
+
};
|
|
1072
|
+
RegistrationStatus: {
|
|
1073
|
+
/** @description True only when the instance has zero registered users. */
|
|
1074
|
+
open: boolean;
|
|
1075
|
+
};
|
|
1076
|
+
LoginBeginRequest: {
|
|
1077
|
+
/** @example ryan */
|
|
1078
|
+
username: string;
|
|
1079
|
+
};
|
|
1080
|
+
/**
|
|
1081
|
+
* @description The WebAuthn specification's own JSON shape for
|
|
1082
|
+
* `PublicKeyCredentialCreationOptions`/`PublicKeyCredentialRequestOptions`
|
|
1083
|
+
* (the begin responses) and `PublicKeyCredential`
|
|
1084
|
+
* (the finish request bodies) — passed through to and from the
|
|
1085
|
+
* browser's own `navigator.credentials` API untouched, so this
|
|
1086
|
+
* contract intentionally doesn't re-model WebAuthn's own schema.
|
|
1087
|
+
*/
|
|
1088
|
+
WebAuthnCeremonyOptions: {
|
|
1089
|
+
[key: string]: unknown;
|
|
1090
|
+
};
|
|
1091
|
+
/**
|
|
1092
|
+
* @description The dashboard/Insights filter bar's own saved shape (#353) —
|
|
1093
|
+
* whatever `filters.js`'s `loadState`/`saveState` already produce
|
|
1094
|
+
* client-side (shared forge/repo/label/author/title/created/
|
|
1095
|
+
* updated/groupBy, plus the two board-owned extras with no
|
|
1096
|
+
* equivalent on the other entity type). This server stores and
|
|
1097
|
+
* returns it verbatim, byte for byte, and never parses or
|
|
1098
|
+
* validates its shape — the same "opaque blob, not this layer's
|
|
1099
|
+
* concern" treatment WebAuthnCeremonyOptions above gets, so a
|
|
1100
|
+
* client-side shape change here never needs a matching spec change.
|
|
1101
|
+
*/
|
|
1102
|
+
FilterState: {
|
|
1103
|
+
[key: string]: unknown;
|
|
1104
|
+
};
|
|
1105
|
+
SessionUser: {
|
|
1106
|
+
username: string;
|
|
1107
|
+
displayName: string;
|
|
1108
|
+
isAdmin: boolean;
|
|
1109
|
+
};
|
|
1110
|
+
AdminUser: {
|
|
1111
|
+
username: string;
|
|
1112
|
+
displayName: string;
|
|
1113
|
+
isAdmin: boolean;
|
|
1114
|
+
/** Format: date-time */
|
|
1115
|
+
createdAt: string;
|
|
1116
|
+
};
|
|
1117
|
+
/**
|
|
1118
|
+
* @description An outstanding (unconsumed, unexpired) invite's own metadata —
|
|
1119
|
+
* never the raw token, which only AdminInviteCreateResponse ever
|
|
1120
|
+
* carries, once, at creation time.
|
|
1121
|
+
*/
|
|
1122
|
+
AdminInvite: {
|
|
1123
|
+
/**
|
|
1124
|
+
* @description The invite's own stable identifier — pass this back to POST
|
|
1125
|
+
* /api/admin/invites/{token}/revoke, not the raw token an
|
|
1126
|
+
* invitee registers with.
|
|
1127
|
+
*/
|
|
1128
|
+
id: string;
|
|
1129
|
+
username: string;
|
|
1130
|
+
displayName: string;
|
|
1131
|
+
/** Format: date-time */
|
|
1132
|
+
expiresAt: string;
|
|
1133
|
+
};
|
|
1134
|
+
AdminInviteCreateRequest: {
|
|
1135
|
+
/** @example alex */
|
|
1136
|
+
username: string;
|
|
1137
|
+
/** @example Alex */
|
|
1138
|
+
displayName: string;
|
|
1139
|
+
};
|
|
1140
|
+
/**
|
|
1141
|
+
* @description The one and only response that ever carries the raw invite token
|
|
1142
|
+
* — shown to the admin once, at creation time, for them to copy
|
|
1143
|
+
* into a `/login?invite=<token>` link and hand to the invitee out
|
|
1144
|
+
* of band. Only its hash is stored, so it can't be recovered from
|
|
1145
|
+
* here again.
|
|
1146
|
+
*/
|
|
1147
|
+
AdminInviteCreateResponse: {
|
|
1148
|
+
token: string;
|
|
1149
|
+
username: string;
|
|
1150
|
+
displayName: string;
|
|
1151
|
+
/** Format: date-time */
|
|
1152
|
+
expiresAt: string;
|
|
1153
|
+
};
|
|
1154
|
+
SharedUser: {
|
|
1155
|
+
username: string;
|
|
1156
|
+
displayName: string;
|
|
1157
|
+
};
|
|
1158
|
+
SharingResponse: {
|
|
1159
|
+
/** @description Users the signed-in user has shared their own dashboard with. */
|
|
1160
|
+
sharedWith: components["schemas"]["SharedUser"][];
|
|
1161
|
+
/** @description Users who have shared their dashboard with the signed-in user. */
|
|
1162
|
+
sharedWithMe: components["schemas"]["SharedUser"][];
|
|
1163
|
+
};
|
|
1164
|
+
/**
|
|
1165
|
+
* @description The signed-in user's own GitHub/Forgejo configuration. Never
|
|
1166
|
+
* includes a forge token's value — only whether one is currently
|
|
1167
|
+
* saved, so the UI can show a "Configured" badge without the secret
|
|
1168
|
+
* ever reaching the browser. webhookToken/webhookSecret are the
|
|
1169
|
+
* exception: they're ours to hand back in the clear, since the user
|
|
1170
|
+
* has to paste them into the forge's own webhook setup.
|
|
1171
|
+
*/
|
|
1172
|
+
SettingsResponse: {
|
|
1173
|
+
/** @description Used as a token-free public-repos fallback when no GitHub token is set. */
|
|
1174
|
+
githubUsername: string;
|
|
1175
|
+
/** @description Whether a GitHub token is currently saved. */
|
|
1176
|
+
githubTokenSet: boolean;
|
|
1177
|
+
forgejoUrl: string;
|
|
1178
|
+
/** @description Used as a token-free public-repos fallback when no Forgejo token is set. */
|
|
1179
|
+
forgejoUsername: string;
|
|
1180
|
+
/** @description Whether a Forgejo token is currently saved. */
|
|
1181
|
+
forgejoTokenSet: boolean;
|
|
1182
|
+
/**
|
|
1183
|
+
* @description Identifies this user in a webhook URL
|
|
1184
|
+
* (`/api/webhooks/{provider}/{webhookToken}`). Generated on
|
|
1185
|
+
* first visit to Settings and stable after that.
|
|
1186
|
+
*/
|
|
1187
|
+
webhookToken: string;
|
|
1188
|
+
/**
|
|
1189
|
+
* @description Pasted into the forge's own webhook "Secret" field, used to
|
|
1190
|
+
* verify the signature header on incoming webhook deliveries
|
|
1191
|
+
* (`X-Hub-Signature-256` on GitHub, `X-Forgejo-Signature` on
|
|
1192
|
+
* Forgejo). Never appears in the webhook URL itself.
|
|
1193
|
+
*/
|
|
1194
|
+
webhookSecret: string;
|
|
1195
|
+
/**
|
|
1196
|
+
* @description Overrides the default restraint the Update branch/Dependabot/
|
|
1197
|
+
* Renovate action buttons apply to a pull request opened by
|
|
1198
|
+
* release-please, Dependabot, or Renovate — those tools already
|
|
1199
|
+
* keep their own PRs current on their own schedule. False (the
|
|
1200
|
+
* default) leaves bot-managed PRs alone; true treats them the
|
|
1201
|
+
* same as any other PR.
|
|
1202
|
+
*/
|
|
1203
|
+
allowBotPrUpdates: boolean;
|
|
1204
|
+
/**
|
|
1205
|
+
* @description The label Renovate's own rebase/retry trigger listens for on
|
|
1206
|
+
* a repo (Renovate's own `rebaseLabel` config option — genuinely
|
|
1207
|
+
* per-repo configurable, so this is a user-set override rather
|
|
1208
|
+
* than a hardcoded constant). Empty means Renovate's own
|
|
1209
|
+
* documented default, `rebase`.
|
|
1210
|
+
*/
|
|
1211
|
+
renovateRebaseLabel: string;
|
|
1212
|
+
/**
|
|
1213
|
+
* @description The signed-in user's own theme preference (#352). Empty
|
|
1214
|
+
* means "system" — follow the browser's prefers-color-scheme
|
|
1215
|
+
* rather than a saved choice. Set only from Settings; every
|
|
1216
|
+
* other page reads it via the lightweight
|
|
1217
|
+
* GET /api/settings/theme instead of this endpoint.
|
|
1218
|
+
* @enum {string}
|
|
1219
|
+
*/
|
|
1220
|
+
theme: "" | "light" | "dark";
|
|
1221
|
+
};
|
|
1222
|
+
/**
|
|
1223
|
+
* @description Replaces the signed-in user's saved GitHub/Forgejo configuration.
|
|
1224
|
+
* A blank `githubToken` or `forgejoToken` keeps whatever token is
|
|
1225
|
+
* already saved for that forge rather than clearing it — this is
|
|
1226
|
+
* the only way to update the username fields without having to
|
|
1227
|
+
* resubmit a token you don't want to re-paste. Theme isn't
|
|
1228
|
+
* settable here at all — see PUT /api/settings/theme.
|
|
1229
|
+
*/
|
|
1230
|
+
SettingsRequest: {
|
|
1231
|
+
githubToken?: string;
|
|
1232
|
+
githubUsername?: string;
|
|
1233
|
+
forgejoUrl?: string;
|
|
1234
|
+
forgejoToken?: string;
|
|
1235
|
+
forgejoUsername?: string;
|
|
1236
|
+
allowBotPrUpdates?: boolean;
|
|
1237
|
+
renovateRebaseLabel?: string;
|
|
1238
|
+
};
|
|
1239
|
+
/** @description See GET /api/settings/bot-pr-updates's own description. */
|
|
1240
|
+
BotPrUpdatesResponse: {
|
|
1241
|
+
allowBotPrUpdates: boolean;
|
|
1242
|
+
};
|
|
1243
|
+
/** @description See GET /api/settings/theme's own description. */
|
|
1244
|
+
ThemeResponse: {
|
|
1245
|
+
/** @enum {string} */
|
|
1246
|
+
theme: "" | "light" | "dark";
|
|
1247
|
+
};
|
|
1248
|
+
/** @description See PUT /api/settings/theme's own description. */
|
|
1249
|
+
ThemeRequest: {
|
|
1250
|
+
/** @enum {string} */
|
|
1251
|
+
theme: "" | "light" | "dark";
|
|
1252
|
+
};
|
|
1253
|
+
/**
|
|
1254
|
+
* @description A registered passkey's own metadata (#355) — never the
|
|
1255
|
+
* credential itself, which never leaves the authenticator that
|
|
1256
|
+
* created it; WebAuthn's whole design is that the server only ever
|
|
1257
|
+
* sees a public key and signed assertions, not a secret to lose.
|
|
1258
|
+
*/
|
|
1259
|
+
Credential: {
|
|
1260
|
+
/** @description This passkey's own credential ID (base64url), distinct from the account's user ID. */
|
|
1261
|
+
id: string;
|
|
1262
|
+
/** @description The name given at registration time, so a list of several is tellable apart. */
|
|
1263
|
+
label: string;
|
|
1264
|
+
/** Format: date-time */
|
|
1265
|
+
createdAt: string;
|
|
1266
|
+
};
|
|
1267
|
+
/**
|
|
1268
|
+
* @description A personal API token's own metadata — never the token value
|
|
1269
|
+
* itself, which only ever appears once, in
|
|
1270
|
+
* APITokenCreateResponse's own response body at creation time.
|
|
1271
|
+
*/
|
|
1272
|
+
APIToken: {
|
|
1273
|
+
id: string;
|
|
1274
|
+
/** @description The name given at creation time, so a list of several is tellable apart. */
|
|
1275
|
+
label: string;
|
|
1276
|
+
/** Format: date-time */
|
|
1277
|
+
createdAt: string;
|
|
1278
|
+
/**
|
|
1279
|
+
* Format: date-time
|
|
1280
|
+
* @description When this token stops authenticating requests (#356) —
|
|
1281
|
+
* always set, mandatory at creation, no "never expires"
|
|
1282
|
+
* option. A token whose expiration has passed is rejected the
|
|
1283
|
+
* same way an invalid one is.
|
|
1284
|
+
*/
|
|
1285
|
+
expiresAt: string;
|
|
1286
|
+
/**
|
|
1287
|
+
* Format: date-time
|
|
1288
|
+
* @description Omitted if this token has never authenticated a request yet.
|
|
1289
|
+
*/
|
|
1290
|
+
lastUsedAt?: string;
|
|
1291
|
+
};
|
|
1292
|
+
APITokenCreateRequest: {
|
|
1293
|
+
label: string;
|
|
1294
|
+
/**
|
|
1295
|
+
* Format: date-time
|
|
1296
|
+
* @description Must be in the future and no more than 366 days out (#356,
|
|
1297
|
+
* matching GitHub's own fine-grained-token maximum) — the
|
|
1298
|
+
* Settings UI offers 7/30/60/90-day presets (30 pre-selected)
|
|
1299
|
+
* or a custom date within that same cap, never an option for
|
|
1300
|
+
* no expiration at all.
|
|
1301
|
+
*/
|
|
1302
|
+
expiresAt: string;
|
|
1303
|
+
};
|
|
1304
|
+
/**
|
|
1305
|
+
* @description The one and only response that ever carries the raw token value
|
|
1306
|
+
* — shown to the user once, at creation time; only its hash is
|
|
1307
|
+
* stored, so it can't be recovered from here again. Losing it
|
|
1308
|
+
* means generating a new one.
|
|
1309
|
+
*/
|
|
1310
|
+
APITokenCreateResponse: {
|
|
1311
|
+
id: string;
|
|
1312
|
+
label: string;
|
|
1313
|
+
/** Format: date-time */
|
|
1314
|
+
createdAt: string;
|
|
1315
|
+
/** Format: date-time */
|
|
1316
|
+
expiresAt: string;
|
|
1317
|
+
/** @description The raw Bearer credential: `Authorization: Bearer <token>`. */
|
|
1318
|
+
token: string;
|
|
1319
|
+
};
|
|
1320
|
+
/** @description Which repo to create or fix up a webhook on. */
|
|
1321
|
+
WebhookEnsureRequest: {
|
|
1322
|
+
forge: components["schemas"]["Forge"];
|
|
1323
|
+
/** @description "owner/repo", matching a Repo.fullName from GET /api/dashboard. */
|
|
1324
|
+
fullName: string;
|
|
1325
|
+
};
|
|
1326
|
+
/**
|
|
1327
|
+
* @description Which repo to ignore, and in which scope(s) (#511). At least one
|
|
1328
|
+
* of prs/issues must be true — a request with both false is
|
|
1329
|
+
* rejected with 400 rather than silently doing nothing; use POST
|
|
1330
|
+
* /api/repos/unignore to clear both at once instead.
|
|
1331
|
+
*/
|
|
1332
|
+
RepoIgnoreRequest: {
|
|
1333
|
+
forge: components["schemas"]["Forge"];
|
|
1334
|
+
/** @description "owner/repo", matching a Repo.fullName from GET /api/dashboard. */
|
|
1335
|
+
fullName: string;
|
|
1336
|
+
/** @description Whether to ignore this repo's pull requests. */
|
|
1337
|
+
prs: boolean;
|
|
1338
|
+
/** @description Whether to ignore this repo's issues. */
|
|
1339
|
+
issues: boolean;
|
|
1340
|
+
};
|
|
1341
|
+
/** @description Which pull request to act on. */
|
|
1342
|
+
PullRequestActionRequest: {
|
|
1343
|
+
forge: components["schemas"]["Forge"];
|
|
1344
|
+
/** @description "owner/repo", matching a Repo.fullName from GET /api/dashboard. */
|
|
1345
|
+
fullName: string;
|
|
1346
|
+
/** @description Matching a PullRequest.number from GET /api/dashboard. */
|
|
1347
|
+
number: number;
|
|
1348
|
+
};
|
|
1349
|
+
/** @description Which pull request to act on, and which of Dependabot's own comment commands to send. */
|
|
1350
|
+
PullRequestDependabotActionRequest: {
|
|
1351
|
+
forge: components["schemas"]["Forge"];
|
|
1352
|
+
/** @description "owner/repo", matching a Repo.fullName from GET /api/dashboard. */
|
|
1353
|
+
fullName: string;
|
|
1354
|
+
/** @description Matching a PullRequest.number from GET /api/dashboard. */
|
|
1355
|
+
number: number;
|
|
1356
|
+
/**
|
|
1357
|
+
* @description Which Dependabot comment command to post — "@dependabot rebase" or "@dependabot recreate".
|
|
1358
|
+
* @enum {string}
|
|
1359
|
+
*/
|
|
1360
|
+
action: "rebase" | "recreate";
|
|
1361
|
+
};
|
|
1362
|
+
/** @enum {string} */
|
|
1363
|
+
Forge: "github" | "forgejo";
|
|
1364
|
+
/**
|
|
1365
|
+
* @description The combined result across every check reported against the pull
|
|
1366
|
+
* request's head commit. "none" means neither forge reported any
|
|
1367
|
+
* check at all, not that one failed.
|
|
1368
|
+
* @enum {string}
|
|
1369
|
+
*/
|
|
1370
|
+
CIStatus: "success" | "failure" | "pending" | "none";
|
|
1371
|
+
/**
|
|
1372
|
+
* @description One job/check's own status — the per-job detail CIStatus
|
|
1373
|
+
* deliberately doesn't carry, since CIStatus is the combined result
|
|
1374
|
+
* across every one of them.
|
|
1375
|
+
* @enum {string}
|
|
1376
|
+
*/
|
|
1377
|
+
CheckState: "queued" | "running" | "success" | "failure" | "cancelled" | "skipped" | "timed_out";
|
|
1378
|
+
/** @description One job/check run against a pull request's head commit. */
|
|
1379
|
+
Check: {
|
|
1380
|
+
name: string;
|
|
1381
|
+
state: components["schemas"]["CheckState"];
|
|
1382
|
+
/** @description That job's own page on the forge that ran it — never the pull request's own page. */
|
|
1383
|
+
url: string;
|
|
1384
|
+
};
|
|
1385
|
+
PullRequestChecksResponse: {
|
|
1386
|
+
checks: components["schemas"]["Check"][];
|
|
1387
|
+
};
|
|
1388
|
+
/**
|
|
1389
|
+
* @description A pull request's mergeable/blocked state, as coarse as every forge
|
|
1390
|
+
* this service talks to can agree on. "blocked" covers anything
|
|
1391
|
+
* stopping a merge that isn't confirmed to be a real conflict —
|
|
1392
|
+
* including Forgejo's own mergeable flag reporting false, since its
|
|
1393
|
+
* server computes that asynchronously and can report it stale.
|
|
1394
|
+
* "unknown" covers both a forge that hasn't determined this yet and
|
|
1395
|
+
* this service being unable to determine it.
|
|
1396
|
+
* @enum {string}
|
|
1397
|
+
*/
|
|
1398
|
+
MergeStatus: "mergeable" | "conflicting" | "blocked" | "unknown";
|
|
1399
|
+
Label: {
|
|
1400
|
+
/** @example kind/bug */
|
|
1401
|
+
name: string;
|
|
1402
|
+
/**
|
|
1403
|
+
* @description The label's colour as a hex string with no leading "#",
|
|
1404
|
+
* exactly as the forge reports it.
|
|
1405
|
+
* @example d73a4a
|
|
1406
|
+
*/
|
|
1407
|
+
color: string;
|
|
1408
|
+
};
|
|
1409
|
+
/**
|
|
1410
|
+
* @description Why a forge is unreachable, or why a write to it was rejected, as
|
|
1411
|
+
* coarse as every forge this service talks to can agree on.
|
|
1412
|
+
* "unauthorized" covers both a bad token and a forbidden request;
|
|
1413
|
+
* "not_found" usually means a wrong instance URL. "conflict" is only
|
|
1414
|
+
* ever returned from a pull-request write — the forge reports the PR
|
|
1415
|
+
* itself isn't currently mergeable. "unknown" covers a signal this
|
|
1416
|
+
* service doesn't recognize, rather than a guessed-at specific cause.
|
|
1417
|
+
* @enum {string}
|
|
1418
|
+
*/
|
|
1419
|
+
ForgeErrorKind: "unreachable" | "unauthorized" | "not_found" | "rate_limited" | "conflict" | "unknown";
|
|
1420
|
+
ForgeHealth: {
|
|
1421
|
+
forge: components["schemas"]["Forge"];
|
|
1422
|
+
/** @description Whether the last refresh attempt against this forge succeeded. */
|
|
1423
|
+
reachable: boolean;
|
|
1424
|
+
/** @description A human-readable explanation of the last failure, if reachable is false. Mapped from errorKind, not the raw underlying error text. Omitted when reachable. */
|
|
1425
|
+
error?: string;
|
|
1426
|
+
errorKind?: components["schemas"]["ForgeErrorKind"];
|
|
1427
|
+
/** @description Repositories with write access this forge reported. */
|
|
1428
|
+
repoCount: number;
|
|
1429
|
+
/** @description GitHub's GraphQL budget (#361) — a completely separate 5000/hour allowance from rateLimitREST, populated from the rateLimit block GitHub embeds in every GraphQL response. Never set for a forge with no GraphQL API (Forgejo). */
|
|
1430
|
+
rateLimitGraphQL?: components["schemas"]["RateLimit"];
|
|
1431
|
+
/** @description The forge's REST budget, from real X-RateLimit-* response headers. For GitHub, this is checkWebhooks and every write action (merge, update branch, comment, label) — a different 5000/hour allowance from rateLimitGraphQL, not a duplicate of it. Omitted on a poll that made no REST call at all (no webhook path configured). For Forgejo, or any forge reached through GenericSource, this is the only budget there is to report — GenericSource makes exclusively REST-style calls. */
|
|
1432
|
+
rateLimitREST?: components["schemas"]["RateLimit"];
|
|
1433
|
+
};
|
|
1434
|
+
/** @description One of a forge API's own request budgets for the credential the last refresh used — see ForgeHealth.rateLimitGraphQL/rateLimitREST for which budget this is and when each is (or isn't) reported. */
|
|
1435
|
+
RateLimit: {
|
|
1436
|
+
/** @description Requests allowed per window. */
|
|
1437
|
+
limit: number;
|
|
1438
|
+
/** @description Requests left in the current window. */
|
|
1439
|
+
remaining: number;
|
|
1440
|
+
/**
|
|
1441
|
+
* Format: date-time
|
|
1442
|
+
* @description When the window resets and remaining goes back to limit.
|
|
1443
|
+
*/
|
|
1444
|
+
resetsAt: string;
|
|
1445
|
+
/** @description The point price the most recent call was actually charged (#440) — GraphQL-specific, since a REST request has no separate cost concept beyond the flat one-request-one-point REST's own budget already counts. Omitted for a REST-sourced RateLimit. */
|
|
1446
|
+
cost?: number;
|
|
1447
|
+
};
|
|
1448
|
+
PullRequest: {
|
|
1449
|
+
forge: components["schemas"]["Forge"];
|
|
1450
|
+
/**
|
|
1451
|
+
* @description Owner-qualified repository name.
|
|
1452
|
+
* @example alrayyes/hush-hush
|
|
1453
|
+
*/
|
|
1454
|
+
repo: string;
|
|
1455
|
+
number: number;
|
|
1456
|
+
title: string;
|
|
1457
|
+
/**
|
|
1458
|
+
* Format: uri
|
|
1459
|
+
* @description The real pull request URL on its own forge.
|
|
1460
|
+
*/
|
|
1461
|
+
url: string;
|
|
1462
|
+
author: string;
|
|
1463
|
+
draft: boolean;
|
|
1464
|
+
labels: components["schemas"]["Label"][];
|
|
1465
|
+
/** Format: date-time */
|
|
1466
|
+
createdAt: string;
|
|
1467
|
+
/** Format: date-time */
|
|
1468
|
+
updatedAt: string;
|
|
1469
|
+
ci: components["schemas"]["CIStatus"];
|
|
1470
|
+
mergeStatus: components["schemas"]["MergeStatus"];
|
|
1471
|
+
/**
|
|
1472
|
+
* @description Whether this pull request's base branch has moved since its
|
|
1473
|
+
* merge-base was computed. Deliberately its own field rather
|
|
1474
|
+
* than a mergeStatus value: on Forgejo a pull request can be
|
|
1475
|
+
* both mergeable and behind at once (its mergeable flag doesn't
|
|
1476
|
+
* get recomputed just because the base moved), so folding this
|
|
1477
|
+
* into mergeStatus would force picking one and losing the
|
|
1478
|
+
* other.
|
|
1479
|
+
*/
|
|
1480
|
+
behind: boolean;
|
|
1481
|
+
/**
|
|
1482
|
+
* @description Whether auto-merge is currently scheduled on this pull request.
|
|
1483
|
+
* Omitted when the owning forge has no way to report this at all
|
|
1484
|
+
* (Forgejo, today) — never false in that case, since this service
|
|
1485
|
+
* genuinely doesn't know.
|
|
1486
|
+
*/
|
|
1487
|
+
autoMergeEnabled?: boolean;
|
|
1488
|
+
};
|
|
1489
|
+
Issue: {
|
|
1490
|
+
forge: components["schemas"]["Forge"];
|
|
1491
|
+
/** @example alrayyes/hush-hush */
|
|
1492
|
+
repo: string;
|
|
1493
|
+
number: number;
|
|
1494
|
+
title: string;
|
|
1495
|
+
/**
|
|
1496
|
+
* Format: uri
|
|
1497
|
+
* @description The real issue URL on its own forge.
|
|
1498
|
+
*/
|
|
1499
|
+
url: string;
|
|
1500
|
+
author: string;
|
|
1501
|
+
labels: components["schemas"]["Label"][];
|
|
1502
|
+
/** Format: date-time */
|
|
1503
|
+
createdAt: string;
|
|
1504
|
+
/** Format: date-time */
|
|
1505
|
+
updatedAt: string;
|
|
1506
|
+
};
|
|
1507
|
+
Dashboard: {
|
|
1508
|
+
/**
|
|
1509
|
+
* Format: date-time
|
|
1510
|
+
* @description When this snapshot was refreshed, not when it was requested.
|
|
1511
|
+
*/
|
|
1512
|
+
generatedAt: string;
|
|
1513
|
+
forges: components["schemas"]["ForgeHealth"][];
|
|
1514
|
+
pullRequests: components["schemas"]["PullRequest"][];
|
|
1515
|
+
issues: components["schemas"]["Issue"][];
|
|
1516
|
+
repos: components["schemas"]["RepoStatus"][];
|
|
1517
|
+
};
|
|
1518
|
+
/**
|
|
1519
|
+
* @description One tracked repository, whether or not it currently has anything
|
|
1520
|
+
* open — repoCount alone can't name it, and it wouldn't otherwise
|
|
1521
|
+
* appear anywhere pullRequests/issues don't already mention it.
|
|
1522
|
+
*/
|
|
1523
|
+
RepoStatus: {
|
|
1524
|
+
forge: components["schemas"]["Forge"];
|
|
1525
|
+
/** @example alrayyes/forge-dashboard */
|
|
1526
|
+
fullName: string;
|
|
1527
|
+
/**
|
|
1528
|
+
* Format: uri
|
|
1529
|
+
* @description The repo's own page on its forge, for linking out.
|
|
1530
|
+
* @example https://github.com/alrayyes/forge-dashboard
|
|
1531
|
+
*/
|
|
1532
|
+
url: string;
|
|
1533
|
+
/**
|
|
1534
|
+
* @description Whether the signed-in user has ignored this repo in either
|
|
1535
|
+
* scope below (#363, #511) — true whenever ignoredPRs or
|
|
1536
|
+
* ignoredIssues is true. The repo itself still appears here
|
|
1537
|
+
* with accurate hasWebhook/canManageWebhooks regardless.
|
|
1538
|
+
*/
|
|
1539
|
+
ignored: boolean;
|
|
1540
|
+
/**
|
|
1541
|
+
* @description Whether the signed-in user has ignored this repo's pull
|
|
1542
|
+
* requests specifically (#511) — its pullRequests entries are
|
|
1543
|
+
* excluded from this same response and from Insights.
|
|
1544
|
+
*/
|
|
1545
|
+
ignoredPRs: boolean;
|
|
1546
|
+
/**
|
|
1547
|
+
* @description Whether the signed-in user has ignored this repo's issues
|
|
1548
|
+
* specifically (#511) — its issues entries are excluded from
|
|
1549
|
+
* this same response and from Insights.
|
|
1550
|
+
*/
|
|
1551
|
+
ignoredIssues: boolean;
|
|
1552
|
+
/**
|
|
1553
|
+
* @description Whether this app has ever recorded a signature-verified
|
|
1554
|
+
* webhook delivery for this repo. Passive: it reflects a real
|
|
1555
|
+
* delivery having arrived, not whether a webhook object exists
|
|
1556
|
+
* on the forge — a correctly configured webhook that just
|
|
1557
|
+
* hasn't fired yet still reads false here, the same as a
|
|
1558
|
+
* misconfigured one would.
|
|
1559
|
+
*/
|
|
1560
|
+
hasWebhook: boolean;
|
|
1561
|
+
/**
|
|
1562
|
+
* @description Whether the signed-in user's own permission on this repo is
|
|
1563
|
+
* enough to list/create its webhooks — GitHub requires admin
|
|
1564
|
+
* specifically (write/maintain can push but still 404 on the
|
|
1565
|
+
* hooks endpoint, by GitHub's own design); Forgejo's equivalent
|
|
1566
|
+
* is its own admin permission flag. Always false for a repo
|
|
1567
|
+
* reached through an unauthenticated, username-only listing.
|
|
1568
|
+
* A point-in-time snapshot: a permission change since the last
|
|
1569
|
+
* refresh can still make a following ensure-webhook call fail
|
|
1570
|
+
* despite this having said true.
|
|
1571
|
+
*/
|
|
1572
|
+
canManageWebhooks: boolean;
|
|
1573
|
+
/**
|
|
1574
|
+
* @description Whether the signed-in user has turned on automatic branch
|
|
1575
|
+
* updates for this repo (#365) — any of its pull requests the
|
|
1576
|
+
* background refresh finds behind its base branch gets updated
|
|
1577
|
+
* the same way a manual "Update branch" click would, without
|
|
1578
|
+
* one. Suppressed for a bot-managed pull request (release-please,
|
|
1579
|
+
* Dependabot, Renovate) unless bot-PR updates are separately
|
|
1580
|
+
* allowed (POST /api/settings/bot-pr-updates), the same
|
|
1581
|
+
* restraint the manual button already applies.
|
|
1582
|
+
*/
|
|
1583
|
+
autoUpdateBranch: boolean;
|
|
1584
|
+
};
|
|
1585
|
+
};
|
|
1586
|
+
responses: never;
|
|
1587
|
+
parameters: {
|
|
1588
|
+
PathUsername: string;
|
|
1589
|
+
PathWebhookToken: string;
|
|
1590
|
+
PathTokenID: string;
|
|
1591
|
+
};
|
|
1592
|
+
requestBodies: never;
|
|
1593
|
+
headers: never;
|
|
1594
|
+
pathItems: never;
|
|
1595
|
+
}
|
|
1596
|
+
export type $defs = Record<string, never>;
|
|
1597
|
+
export interface operations {
|
|
1598
|
+
getRegistrationStatus: {
|
|
1599
|
+
parameters: {
|
|
1600
|
+
query?: never;
|
|
1601
|
+
header?: never;
|
|
1602
|
+
path?: never;
|
|
1603
|
+
cookie?: never;
|
|
1604
|
+
};
|
|
1605
|
+
requestBody?: never;
|
|
1606
|
+
responses: {
|
|
1607
|
+
/** @description The current registration status. */
|
|
1608
|
+
200: {
|
|
1609
|
+
headers: {
|
|
1610
|
+
[name: string]: unknown;
|
|
1611
|
+
};
|
|
1612
|
+
content: {
|
|
1613
|
+
"application/json": components["schemas"]["RegistrationStatus"];
|
|
1614
|
+
};
|
|
1615
|
+
};
|
|
1616
|
+
};
|
|
1617
|
+
};
|
|
1618
|
+
beginRegistration: {
|
|
1619
|
+
parameters: {
|
|
1620
|
+
query?: never;
|
|
1621
|
+
header?: never;
|
|
1622
|
+
path?: never;
|
|
1623
|
+
cookie?: never;
|
|
1624
|
+
};
|
|
1625
|
+
requestBody: {
|
|
1626
|
+
content: {
|
|
1627
|
+
"application/json": components["schemas"]["RegisterBeginRequest"];
|
|
1628
|
+
};
|
|
1629
|
+
};
|
|
1630
|
+
responses: {
|
|
1631
|
+
/**
|
|
1632
|
+
* @description WebAuthn credential creation options, passed straight to the
|
|
1633
|
+
* browser's `navigator.credentials.create()`.
|
|
1634
|
+
*/
|
|
1635
|
+
200: {
|
|
1636
|
+
headers: {
|
|
1637
|
+
[name: string]: unknown;
|
|
1638
|
+
};
|
|
1639
|
+
content: {
|
|
1640
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1641
|
+
};
|
|
1642
|
+
};
|
|
1643
|
+
/**
|
|
1644
|
+
* @description Self-registration is closed (an account already exists) and
|
|
1645
|
+
* no valid, unexpired, unconsumed invite for this username was
|
|
1646
|
+
* presented.
|
|
1647
|
+
*/
|
|
1648
|
+
403: {
|
|
1649
|
+
headers: {
|
|
1650
|
+
[name: string]: unknown;
|
|
1651
|
+
};
|
|
1652
|
+
content: {
|
|
1653
|
+
"application/json": components["schemas"]["Error"];
|
|
1654
|
+
};
|
|
1655
|
+
};
|
|
1656
|
+
/** @description That username is already registered. */
|
|
1657
|
+
409: {
|
|
1658
|
+
headers: {
|
|
1659
|
+
[name: string]: unknown;
|
|
1660
|
+
};
|
|
1661
|
+
content: {
|
|
1662
|
+
"application/json": components["schemas"]["Error"];
|
|
1663
|
+
};
|
|
1664
|
+
};
|
|
1665
|
+
};
|
|
1666
|
+
};
|
|
1667
|
+
finishRegistration: {
|
|
1668
|
+
parameters: {
|
|
1669
|
+
query: {
|
|
1670
|
+
username: string;
|
|
1671
|
+
};
|
|
1672
|
+
header?: never;
|
|
1673
|
+
path?: never;
|
|
1674
|
+
cookie?: never;
|
|
1675
|
+
};
|
|
1676
|
+
/**
|
|
1677
|
+
* @description The raw response from `navigator.credentials.create()`, exactly as
|
|
1678
|
+
* the browser produced it — forwarded to the server untouched.
|
|
1679
|
+
*/
|
|
1680
|
+
requestBody: {
|
|
1681
|
+
content: {
|
|
1682
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1683
|
+
};
|
|
1684
|
+
};
|
|
1685
|
+
responses: {
|
|
1686
|
+
/** @description Registration succeeded; a session cookie is now set. */
|
|
1687
|
+
200: {
|
|
1688
|
+
headers: {
|
|
1689
|
+
[name: string]: unknown;
|
|
1690
|
+
};
|
|
1691
|
+
content: {
|
|
1692
|
+
"application/json": components["schemas"]["SessionUser"];
|
|
1693
|
+
};
|
|
1694
|
+
};
|
|
1695
|
+
/** @description The ceremony failed verification, or had already expired. */
|
|
1696
|
+
400: {
|
|
1697
|
+
headers: {
|
|
1698
|
+
[name: string]: unknown;
|
|
1699
|
+
};
|
|
1700
|
+
content: {
|
|
1701
|
+
"application/json": components["schemas"]["Error"];
|
|
1702
|
+
};
|
|
1703
|
+
};
|
|
1704
|
+
};
|
|
1705
|
+
};
|
|
1706
|
+
beginLogin: {
|
|
1707
|
+
parameters: {
|
|
1708
|
+
query?: never;
|
|
1709
|
+
header?: never;
|
|
1710
|
+
path?: never;
|
|
1711
|
+
cookie?: never;
|
|
1712
|
+
};
|
|
1713
|
+
requestBody: {
|
|
1714
|
+
content: {
|
|
1715
|
+
"application/json": components["schemas"]["LoginBeginRequest"];
|
|
1716
|
+
};
|
|
1717
|
+
};
|
|
1718
|
+
responses: {
|
|
1719
|
+
/**
|
|
1720
|
+
* @description WebAuthn credential request options, passed straight to the
|
|
1721
|
+
* browser's `navigator.credentials.get()`.
|
|
1722
|
+
*/
|
|
1723
|
+
200: {
|
|
1724
|
+
headers: {
|
|
1725
|
+
[name: string]: unknown;
|
|
1726
|
+
};
|
|
1727
|
+
content: {
|
|
1728
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1729
|
+
};
|
|
1730
|
+
};
|
|
1731
|
+
/** @description No account is registered under that username. */
|
|
1732
|
+
404: {
|
|
1733
|
+
headers: {
|
|
1734
|
+
[name: string]: unknown;
|
|
1735
|
+
};
|
|
1736
|
+
content: {
|
|
1737
|
+
"application/json": components["schemas"]["Error"];
|
|
1738
|
+
};
|
|
1739
|
+
};
|
|
1740
|
+
};
|
|
1741
|
+
};
|
|
1742
|
+
finishLogin: {
|
|
1743
|
+
parameters: {
|
|
1744
|
+
query: {
|
|
1745
|
+
username: string;
|
|
1746
|
+
};
|
|
1747
|
+
header?: never;
|
|
1748
|
+
path?: never;
|
|
1749
|
+
cookie?: never;
|
|
1750
|
+
};
|
|
1751
|
+
/**
|
|
1752
|
+
* @description The raw response from `navigator.credentials.get()`, exactly as
|
|
1753
|
+
* the browser produced it — forwarded to the server untouched.
|
|
1754
|
+
*/
|
|
1755
|
+
requestBody: {
|
|
1756
|
+
content: {
|
|
1757
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1758
|
+
};
|
|
1759
|
+
};
|
|
1760
|
+
responses: {
|
|
1761
|
+
/** @description Login succeeded; a session cookie is now set. */
|
|
1762
|
+
200: {
|
|
1763
|
+
headers: {
|
|
1764
|
+
[name: string]: unknown;
|
|
1765
|
+
};
|
|
1766
|
+
content: {
|
|
1767
|
+
"application/json": components["schemas"]["SessionUser"];
|
|
1768
|
+
};
|
|
1769
|
+
};
|
|
1770
|
+
/** @description The ceremony failed verification, or had already expired. */
|
|
1771
|
+
400: {
|
|
1772
|
+
headers: {
|
|
1773
|
+
[name: string]: unknown;
|
|
1774
|
+
};
|
|
1775
|
+
content: {
|
|
1776
|
+
"application/json": components["schemas"]["Error"];
|
|
1777
|
+
};
|
|
1778
|
+
};
|
|
1779
|
+
};
|
|
1780
|
+
};
|
|
1781
|
+
logout: {
|
|
1782
|
+
parameters: {
|
|
1783
|
+
query?: never;
|
|
1784
|
+
header?: never;
|
|
1785
|
+
path?: never;
|
|
1786
|
+
cookie?: never;
|
|
1787
|
+
};
|
|
1788
|
+
requestBody?: never;
|
|
1789
|
+
responses: {
|
|
1790
|
+
/** @description Logged out; the session cookie is now cleared. */
|
|
1791
|
+
204: {
|
|
1792
|
+
headers: {
|
|
1793
|
+
[name: string]: unknown;
|
|
1794
|
+
};
|
|
1795
|
+
content?: never;
|
|
1796
|
+
};
|
|
1797
|
+
};
|
|
1798
|
+
};
|
|
1799
|
+
getSession: {
|
|
1800
|
+
parameters: {
|
|
1801
|
+
query?: never;
|
|
1802
|
+
header?: never;
|
|
1803
|
+
path?: never;
|
|
1804
|
+
cookie?: never;
|
|
1805
|
+
};
|
|
1806
|
+
requestBody?: never;
|
|
1807
|
+
responses: {
|
|
1808
|
+
/** @description The current session's user. */
|
|
1809
|
+
200: {
|
|
1810
|
+
headers: {
|
|
1811
|
+
[name: string]: unknown;
|
|
1812
|
+
};
|
|
1813
|
+
content: {
|
|
1814
|
+
"application/json": components["schemas"]["SessionUser"];
|
|
1815
|
+
};
|
|
1816
|
+
};
|
|
1817
|
+
/** @description No valid session cookie was presented. */
|
|
1818
|
+
401: {
|
|
1819
|
+
headers: {
|
|
1820
|
+
[name: string]: unknown;
|
|
1821
|
+
};
|
|
1822
|
+
content: {
|
|
1823
|
+
"application/json": components["schemas"]["Error"];
|
|
1824
|
+
};
|
|
1825
|
+
};
|
|
1826
|
+
};
|
|
1827
|
+
};
|
|
1828
|
+
listCredentials: {
|
|
1829
|
+
parameters: {
|
|
1830
|
+
query?: never;
|
|
1831
|
+
header?: never;
|
|
1832
|
+
path?: never;
|
|
1833
|
+
cookie?: never;
|
|
1834
|
+
};
|
|
1835
|
+
requestBody?: never;
|
|
1836
|
+
responses: {
|
|
1837
|
+
/** @description Every registered passkey. */
|
|
1838
|
+
200: {
|
|
1839
|
+
headers: {
|
|
1840
|
+
[name: string]: unknown;
|
|
1841
|
+
};
|
|
1842
|
+
content: {
|
|
1843
|
+
"application/json": components["schemas"]["Credential"][];
|
|
1844
|
+
};
|
|
1845
|
+
};
|
|
1846
|
+
/** @description No valid session cookie was presented. */
|
|
1847
|
+
401: {
|
|
1848
|
+
headers: {
|
|
1849
|
+
[name: string]: unknown;
|
|
1850
|
+
};
|
|
1851
|
+
content: {
|
|
1852
|
+
"application/json": components["schemas"]["Error"];
|
|
1853
|
+
};
|
|
1854
|
+
};
|
|
1855
|
+
};
|
|
1856
|
+
};
|
|
1857
|
+
beginAddCredential: {
|
|
1858
|
+
parameters: {
|
|
1859
|
+
query?: never;
|
|
1860
|
+
header?: never;
|
|
1861
|
+
path?: never;
|
|
1862
|
+
cookie?: never;
|
|
1863
|
+
};
|
|
1864
|
+
requestBody?: never;
|
|
1865
|
+
responses: {
|
|
1866
|
+
/**
|
|
1867
|
+
* @description WebAuthn credential creation options, passed straight to the
|
|
1868
|
+
* browser's `navigator.credentials.create()`. `excludeCredentials`
|
|
1869
|
+
* already lists every passkey the account has, so re-registering
|
|
1870
|
+
* the same authenticator is refused by the browser itself.
|
|
1871
|
+
*/
|
|
1872
|
+
200: {
|
|
1873
|
+
headers: {
|
|
1874
|
+
[name: string]: unknown;
|
|
1875
|
+
};
|
|
1876
|
+
content: {
|
|
1877
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1878
|
+
};
|
|
1879
|
+
};
|
|
1880
|
+
/** @description No valid session cookie was presented. */
|
|
1881
|
+
401: {
|
|
1882
|
+
headers: {
|
|
1883
|
+
[name: string]: unknown;
|
|
1884
|
+
};
|
|
1885
|
+
content: {
|
|
1886
|
+
"application/json": components["schemas"]["Error"];
|
|
1887
|
+
};
|
|
1888
|
+
};
|
|
1889
|
+
};
|
|
1890
|
+
};
|
|
1891
|
+
finishAddCredential: {
|
|
1892
|
+
parameters: {
|
|
1893
|
+
query: {
|
|
1894
|
+
/**
|
|
1895
|
+
* @description A name the user recognizes, e.g. "MacBook" or "YubiKey"
|
|
1896
|
+
* (#355) — prompted for at registration time, never derived
|
|
1897
|
+
* from the authenticator itself.
|
|
1898
|
+
*/
|
|
1899
|
+
label: string;
|
|
1900
|
+
};
|
|
1901
|
+
header?: never;
|
|
1902
|
+
path?: never;
|
|
1903
|
+
cookie?: never;
|
|
1904
|
+
};
|
|
1905
|
+
/**
|
|
1906
|
+
* @description The raw response from `navigator.credentials.create()`, exactly as
|
|
1907
|
+
* the browser produced it — forwarded to the server untouched.
|
|
1908
|
+
*/
|
|
1909
|
+
requestBody: {
|
|
1910
|
+
content: {
|
|
1911
|
+
"application/json": components["schemas"]["WebAuthnCeremonyOptions"];
|
|
1912
|
+
};
|
|
1913
|
+
};
|
|
1914
|
+
responses: {
|
|
1915
|
+
/** @description The new passkey is now registered. */
|
|
1916
|
+
201: {
|
|
1917
|
+
headers: {
|
|
1918
|
+
[name: string]: unknown;
|
|
1919
|
+
};
|
|
1920
|
+
content: {
|
|
1921
|
+
"application/json": components["schemas"]["Credential"];
|
|
1922
|
+
};
|
|
1923
|
+
};
|
|
1924
|
+
/** @description label was blank, or the ceremony failed verification, or had already expired. */
|
|
1925
|
+
400: {
|
|
1926
|
+
headers: {
|
|
1927
|
+
[name: string]: unknown;
|
|
1928
|
+
};
|
|
1929
|
+
content: {
|
|
1930
|
+
"application/json": components["schemas"]["Error"];
|
|
1931
|
+
};
|
|
1932
|
+
};
|
|
1933
|
+
/** @description No valid session cookie was presented. */
|
|
1934
|
+
401: {
|
|
1935
|
+
headers: {
|
|
1936
|
+
[name: string]: unknown;
|
|
1937
|
+
};
|
|
1938
|
+
content: {
|
|
1939
|
+
"application/json": components["schemas"]["Error"];
|
|
1940
|
+
};
|
|
1941
|
+
};
|
|
1942
|
+
};
|
|
1943
|
+
};
|
|
1944
|
+
deleteCredential: {
|
|
1945
|
+
parameters: {
|
|
1946
|
+
query?: never;
|
|
1947
|
+
header?: never;
|
|
1948
|
+
path: {
|
|
1949
|
+
id: string;
|
|
1950
|
+
};
|
|
1951
|
+
cookie?: never;
|
|
1952
|
+
};
|
|
1953
|
+
requestBody?: never;
|
|
1954
|
+
responses: {
|
|
1955
|
+
/** @description Removed. */
|
|
1956
|
+
204: {
|
|
1957
|
+
headers: {
|
|
1958
|
+
[name: string]: unknown;
|
|
1959
|
+
};
|
|
1960
|
+
content?: never;
|
|
1961
|
+
};
|
|
1962
|
+
/** @description This is the account's last remaining passkey. */
|
|
1963
|
+
400: {
|
|
1964
|
+
headers: {
|
|
1965
|
+
[name: string]: unknown;
|
|
1966
|
+
};
|
|
1967
|
+
content: {
|
|
1968
|
+
"application/json": components["schemas"]["Error"];
|
|
1969
|
+
};
|
|
1970
|
+
};
|
|
1971
|
+
/** @description No valid session cookie was presented. */
|
|
1972
|
+
401: {
|
|
1973
|
+
headers: {
|
|
1974
|
+
[name: string]: unknown;
|
|
1975
|
+
};
|
|
1976
|
+
content: {
|
|
1977
|
+
"application/json": components["schemas"]["Error"];
|
|
1978
|
+
};
|
|
1979
|
+
};
|
|
1980
|
+
};
|
|
1981
|
+
};
|
|
1982
|
+
getSettings: {
|
|
1983
|
+
parameters: {
|
|
1984
|
+
query?: never;
|
|
1985
|
+
header?: never;
|
|
1986
|
+
path?: never;
|
|
1987
|
+
cookie?: never;
|
|
1988
|
+
};
|
|
1989
|
+
requestBody?: never;
|
|
1990
|
+
responses: {
|
|
1991
|
+
/** @description The current settings. */
|
|
1992
|
+
200: {
|
|
1993
|
+
headers: {
|
|
1994
|
+
[name: string]: unknown;
|
|
1995
|
+
};
|
|
1996
|
+
content: {
|
|
1997
|
+
"application/json": components["schemas"]["SettingsResponse"];
|
|
1998
|
+
};
|
|
1999
|
+
};
|
|
2000
|
+
/** @description No valid session cookie was presented. */
|
|
2001
|
+
401: {
|
|
2002
|
+
headers: {
|
|
2003
|
+
[name: string]: unknown;
|
|
2004
|
+
};
|
|
2005
|
+
content: {
|
|
2006
|
+
"application/json": components["schemas"]["Error"];
|
|
2007
|
+
};
|
|
2008
|
+
};
|
|
2009
|
+
};
|
|
2010
|
+
};
|
|
2011
|
+
putSettings: {
|
|
2012
|
+
parameters: {
|
|
2013
|
+
query?: never;
|
|
2014
|
+
header?: never;
|
|
2015
|
+
path?: never;
|
|
2016
|
+
cookie?: never;
|
|
2017
|
+
};
|
|
2018
|
+
requestBody: {
|
|
2019
|
+
content: {
|
|
2020
|
+
"application/json": components["schemas"]["SettingsRequest"];
|
|
2021
|
+
};
|
|
2022
|
+
};
|
|
2023
|
+
responses: {
|
|
2024
|
+
/** @description Saved. */
|
|
2025
|
+
200: {
|
|
2026
|
+
headers: {
|
|
2027
|
+
[name: string]: unknown;
|
|
2028
|
+
};
|
|
2029
|
+
content: {
|
|
2030
|
+
"application/json": components["schemas"]["SettingsResponse"];
|
|
2031
|
+
};
|
|
2032
|
+
};
|
|
2033
|
+
/**
|
|
2034
|
+
* @description The request body wasn't valid JSON, or a Forgejo token/username
|
|
2035
|
+
* was set with no Forgejo URL — a combination the dashboard can't
|
|
2036
|
+
* use, since the URL is what a token or username connects to.
|
|
2037
|
+
*/
|
|
2038
|
+
400: {
|
|
2039
|
+
headers: {
|
|
2040
|
+
[name: string]: unknown;
|
|
2041
|
+
};
|
|
2042
|
+
content: {
|
|
2043
|
+
"application/json": components["schemas"]["Error"];
|
|
2044
|
+
};
|
|
2045
|
+
};
|
|
2046
|
+
/** @description No valid session cookie was presented. */
|
|
2047
|
+
401: {
|
|
2048
|
+
headers: {
|
|
2049
|
+
[name: string]: unknown;
|
|
2050
|
+
};
|
|
2051
|
+
content: {
|
|
2052
|
+
"application/json": components["schemas"]["Error"];
|
|
2053
|
+
};
|
|
2054
|
+
};
|
|
2055
|
+
};
|
|
2056
|
+
};
|
|
2057
|
+
getBotPrUpdatesSetting: {
|
|
2058
|
+
parameters: {
|
|
2059
|
+
query?: never;
|
|
2060
|
+
header?: never;
|
|
2061
|
+
path?: never;
|
|
2062
|
+
cookie?: never;
|
|
2063
|
+
};
|
|
2064
|
+
requestBody?: never;
|
|
2065
|
+
responses: {
|
|
2066
|
+
/** @description The current value. */
|
|
2067
|
+
200: {
|
|
2068
|
+
headers: {
|
|
2069
|
+
[name: string]: unknown;
|
|
2070
|
+
};
|
|
2071
|
+
content: {
|
|
2072
|
+
"application/json": components["schemas"]["BotPrUpdatesResponse"];
|
|
2073
|
+
};
|
|
2074
|
+
};
|
|
2075
|
+
/** @description No valid session cookie was presented. */
|
|
2076
|
+
401: {
|
|
2077
|
+
headers: {
|
|
2078
|
+
[name: string]: unknown;
|
|
2079
|
+
};
|
|
2080
|
+
content: {
|
|
2081
|
+
"application/json": components["schemas"]["Error"];
|
|
2082
|
+
};
|
|
2083
|
+
};
|
|
2084
|
+
};
|
|
2085
|
+
};
|
|
2086
|
+
getTheme: {
|
|
2087
|
+
parameters: {
|
|
2088
|
+
query?: never;
|
|
2089
|
+
header?: never;
|
|
2090
|
+
path?: never;
|
|
2091
|
+
cookie?: never;
|
|
2092
|
+
};
|
|
2093
|
+
requestBody?: never;
|
|
2094
|
+
responses: {
|
|
2095
|
+
/** @description The current value. */
|
|
2096
|
+
200: {
|
|
2097
|
+
headers: {
|
|
2098
|
+
[name: string]: unknown;
|
|
2099
|
+
};
|
|
2100
|
+
content: {
|
|
2101
|
+
"application/json": components["schemas"]["ThemeResponse"];
|
|
2102
|
+
};
|
|
2103
|
+
};
|
|
2104
|
+
/** @description No valid session cookie was presented. */
|
|
2105
|
+
401: {
|
|
2106
|
+
headers: {
|
|
2107
|
+
[name: string]: unknown;
|
|
2108
|
+
};
|
|
2109
|
+
content: {
|
|
2110
|
+
"application/json": components["schemas"]["Error"];
|
|
2111
|
+
};
|
|
2112
|
+
};
|
|
2113
|
+
};
|
|
2114
|
+
};
|
|
2115
|
+
setTheme: {
|
|
2116
|
+
parameters: {
|
|
2117
|
+
query?: never;
|
|
2118
|
+
header?: never;
|
|
2119
|
+
path?: never;
|
|
2120
|
+
cookie?: never;
|
|
2121
|
+
};
|
|
2122
|
+
requestBody: {
|
|
2123
|
+
content: {
|
|
2124
|
+
"application/json": components["schemas"]["ThemeRequest"];
|
|
2125
|
+
};
|
|
2126
|
+
};
|
|
2127
|
+
responses: {
|
|
2128
|
+
/** @description The saved value. */
|
|
2129
|
+
200: {
|
|
2130
|
+
headers: {
|
|
2131
|
+
[name: string]: unknown;
|
|
2132
|
+
};
|
|
2133
|
+
content: {
|
|
2134
|
+
"application/json": components["schemas"]["ThemeResponse"];
|
|
2135
|
+
};
|
|
2136
|
+
};
|
|
2137
|
+
/** @description theme wasn't "", "light", or "dark". */
|
|
2138
|
+
400: {
|
|
2139
|
+
headers: {
|
|
2140
|
+
[name: string]: unknown;
|
|
2141
|
+
};
|
|
2142
|
+
content: {
|
|
2143
|
+
"application/json": components["schemas"]["Error"];
|
|
2144
|
+
};
|
|
2145
|
+
};
|
|
2146
|
+
/** @description No valid session cookie was presented. */
|
|
2147
|
+
401: {
|
|
2148
|
+
headers: {
|
|
2149
|
+
[name: string]: unknown;
|
|
2150
|
+
};
|
|
2151
|
+
content: {
|
|
2152
|
+
"application/json": components["schemas"]["Error"];
|
|
2153
|
+
};
|
|
2154
|
+
};
|
|
2155
|
+
};
|
|
2156
|
+
};
|
|
2157
|
+
getFilterState: {
|
|
2158
|
+
parameters: {
|
|
2159
|
+
query?: never;
|
|
2160
|
+
header?: never;
|
|
2161
|
+
path?: never;
|
|
2162
|
+
cookie?: never;
|
|
2163
|
+
};
|
|
2164
|
+
requestBody?: never;
|
|
2165
|
+
responses: {
|
|
2166
|
+
/** @description The saved state, or `{}` if none has ever been saved. */
|
|
2167
|
+
200: {
|
|
2168
|
+
headers: {
|
|
2169
|
+
[name: string]: unknown;
|
|
2170
|
+
};
|
|
2171
|
+
content: {
|
|
2172
|
+
"application/json": components["schemas"]["FilterState"];
|
|
2173
|
+
};
|
|
2174
|
+
};
|
|
2175
|
+
/** @description No valid session cookie was presented. */
|
|
2176
|
+
401: {
|
|
2177
|
+
headers: {
|
|
2178
|
+
[name: string]: unknown;
|
|
2179
|
+
};
|
|
2180
|
+
content: {
|
|
2181
|
+
"application/json": components["schemas"]["Error"];
|
|
2182
|
+
};
|
|
2183
|
+
};
|
|
2184
|
+
};
|
|
2185
|
+
};
|
|
2186
|
+
setFilterState: {
|
|
2187
|
+
parameters: {
|
|
2188
|
+
query?: never;
|
|
2189
|
+
header?: never;
|
|
2190
|
+
path?: never;
|
|
2191
|
+
cookie?: never;
|
|
2192
|
+
};
|
|
2193
|
+
requestBody: {
|
|
2194
|
+
content: {
|
|
2195
|
+
"application/json": components["schemas"]["FilterState"];
|
|
2196
|
+
};
|
|
2197
|
+
};
|
|
2198
|
+
responses: {
|
|
2199
|
+
/** @description Saved. */
|
|
2200
|
+
204: {
|
|
2201
|
+
headers: {
|
|
2202
|
+
[name: string]: unknown;
|
|
2203
|
+
};
|
|
2204
|
+
content?: never;
|
|
2205
|
+
};
|
|
2206
|
+
/** @description The request body wasn't valid JSON, or exceeded the size this endpoint accepts. */
|
|
2207
|
+
400: {
|
|
2208
|
+
headers: {
|
|
2209
|
+
[name: string]: unknown;
|
|
2210
|
+
};
|
|
2211
|
+
content: {
|
|
2212
|
+
"application/json": components["schemas"]["Error"];
|
|
2213
|
+
};
|
|
2214
|
+
};
|
|
2215
|
+
/** @description No valid session cookie was presented. */
|
|
2216
|
+
401: {
|
|
2217
|
+
headers: {
|
|
2218
|
+
[name: string]: unknown;
|
|
2219
|
+
};
|
|
2220
|
+
content: {
|
|
2221
|
+
"application/json": components["schemas"]["Error"];
|
|
2222
|
+
};
|
|
2223
|
+
};
|
|
2224
|
+
};
|
|
2225
|
+
};
|
|
2226
|
+
listAPITokens: {
|
|
2227
|
+
parameters: {
|
|
2228
|
+
query?: never;
|
|
2229
|
+
header?: never;
|
|
2230
|
+
path?: never;
|
|
2231
|
+
cookie?: never;
|
|
2232
|
+
};
|
|
2233
|
+
requestBody?: never;
|
|
2234
|
+
responses: {
|
|
2235
|
+
/** @description Every live token, oldest first. */
|
|
2236
|
+
200: {
|
|
2237
|
+
headers: {
|
|
2238
|
+
[name: string]: unknown;
|
|
2239
|
+
};
|
|
2240
|
+
content: {
|
|
2241
|
+
"application/json": components["schemas"]["APIToken"][];
|
|
2242
|
+
};
|
|
2243
|
+
};
|
|
2244
|
+
/** @description No valid session cookie was presented. */
|
|
2245
|
+
401: {
|
|
2246
|
+
headers: {
|
|
2247
|
+
[name: string]: unknown;
|
|
2248
|
+
};
|
|
2249
|
+
content: {
|
|
2250
|
+
"application/json": components["schemas"]["Error"];
|
|
2251
|
+
};
|
|
2252
|
+
};
|
|
2253
|
+
};
|
|
2254
|
+
};
|
|
2255
|
+
createAPIToken: {
|
|
2256
|
+
parameters: {
|
|
2257
|
+
query?: never;
|
|
2258
|
+
header?: never;
|
|
2259
|
+
path?: never;
|
|
2260
|
+
cookie?: never;
|
|
2261
|
+
};
|
|
2262
|
+
requestBody: {
|
|
2263
|
+
content: {
|
|
2264
|
+
"application/json": components["schemas"]["APITokenCreateRequest"];
|
|
2265
|
+
};
|
|
2266
|
+
};
|
|
2267
|
+
responses: {
|
|
2268
|
+
/** @description Created — the only response that ever carries the raw token. */
|
|
2269
|
+
201: {
|
|
2270
|
+
headers: {
|
|
2271
|
+
[name: string]: unknown;
|
|
2272
|
+
};
|
|
2273
|
+
content: {
|
|
2274
|
+
"application/json": components["schemas"]["APITokenCreateResponse"];
|
|
2275
|
+
};
|
|
2276
|
+
};
|
|
2277
|
+
/**
|
|
2278
|
+
* @description The request body wasn't valid JSON, label was blank, or
|
|
2279
|
+
* expiresAt wasn't in the future or was more than 366 days out.
|
|
2280
|
+
*/
|
|
2281
|
+
400: {
|
|
2282
|
+
headers: {
|
|
2283
|
+
[name: string]: unknown;
|
|
2284
|
+
};
|
|
2285
|
+
content: {
|
|
2286
|
+
"application/json": components["schemas"]["Error"];
|
|
2287
|
+
};
|
|
2288
|
+
};
|
|
2289
|
+
/** @description No valid session cookie was presented. */
|
|
2290
|
+
401: {
|
|
2291
|
+
headers: {
|
|
2292
|
+
[name: string]: unknown;
|
|
2293
|
+
};
|
|
2294
|
+
content: {
|
|
2295
|
+
"application/json": components["schemas"]["Error"];
|
|
2296
|
+
};
|
|
2297
|
+
};
|
|
2298
|
+
};
|
|
2299
|
+
};
|
|
2300
|
+
deleteAPIToken: {
|
|
2301
|
+
parameters: {
|
|
2302
|
+
query?: never;
|
|
2303
|
+
header?: never;
|
|
2304
|
+
path: {
|
|
2305
|
+
id: components["parameters"]["PathTokenID"];
|
|
2306
|
+
};
|
|
2307
|
+
cookie?: never;
|
|
2308
|
+
};
|
|
2309
|
+
requestBody?: never;
|
|
2310
|
+
responses: {
|
|
2311
|
+
/** @description Revoked (or already gone). */
|
|
2312
|
+
204: {
|
|
2313
|
+
headers: {
|
|
2314
|
+
[name: string]: unknown;
|
|
2315
|
+
};
|
|
2316
|
+
content?: never;
|
|
2317
|
+
};
|
|
2318
|
+
/** @description No valid session cookie was presented. */
|
|
2319
|
+
401: {
|
|
2320
|
+
headers: {
|
|
2321
|
+
[name: string]: unknown;
|
|
2322
|
+
};
|
|
2323
|
+
content: {
|
|
2324
|
+
"application/json": components["schemas"]["Error"];
|
|
2325
|
+
};
|
|
2326
|
+
};
|
|
2327
|
+
};
|
|
2328
|
+
};
|
|
2329
|
+
ensureWebhook: {
|
|
2330
|
+
parameters: {
|
|
2331
|
+
query?: never;
|
|
2332
|
+
header?: never;
|
|
2333
|
+
path?: never;
|
|
2334
|
+
cookie?: never;
|
|
2335
|
+
};
|
|
2336
|
+
requestBody: {
|
|
2337
|
+
content: {
|
|
2338
|
+
"application/json": components["schemas"]["WebhookEnsureRequest"];
|
|
2339
|
+
};
|
|
2340
|
+
};
|
|
2341
|
+
responses: {
|
|
2342
|
+
/** @description The webhook now exists and is correctly configured. */
|
|
2343
|
+
204: {
|
|
2344
|
+
headers: {
|
|
2345
|
+
[name: string]: unknown;
|
|
2346
|
+
};
|
|
2347
|
+
content?: never;
|
|
2348
|
+
};
|
|
2349
|
+
/**
|
|
2350
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2351
|
+
* "owner/repo", no credentials are saved for that forge, or
|
|
2352
|
+
* that forge's client doesn't support managing webhooks at all.
|
|
2353
|
+
*/
|
|
2354
|
+
400: {
|
|
2355
|
+
headers: {
|
|
2356
|
+
[name: string]: unknown;
|
|
2357
|
+
};
|
|
2358
|
+
content: {
|
|
2359
|
+
"application/json": components["schemas"]["Error"];
|
|
2360
|
+
};
|
|
2361
|
+
};
|
|
2362
|
+
/** @description No valid session cookie was presented. */
|
|
2363
|
+
401: {
|
|
2364
|
+
headers: {
|
|
2365
|
+
[name: string]: unknown;
|
|
2366
|
+
};
|
|
2367
|
+
content: {
|
|
2368
|
+
"application/json": components["schemas"]["Error"];
|
|
2369
|
+
};
|
|
2370
|
+
};
|
|
2371
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover managing webhooks, or it isn't an admin on that repo. */
|
|
2372
|
+
403: {
|
|
2373
|
+
headers: {
|
|
2374
|
+
[name: string]: unknown;
|
|
2375
|
+
};
|
|
2376
|
+
content: {
|
|
2377
|
+
"application/json": components["schemas"]["Error"];
|
|
2378
|
+
};
|
|
2379
|
+
};
|
|
2380
|
+
/** @description The forge reported the repo itself doesn't exist (or isn't visible to this token). */
|
|
2381
|
+
404: {
|
|
2382
|
+
headers: {
|
|
2383
|
+
[name: string]: unknown;
|
|
2384
|
+
};
|
|
2385
|
+
content: {
|
|
2386
|
+
"application/json": components["schemas"]["Error"];
|
|
2387
|
+
};
|
|
2388
|
+
};
|
|
2389
|
+
/** @description The forge rate-limited the request. */
|
|
2390
|
+
429: {
|
|
2391
|
+
headers: {
|
|
2392
|
+
[name: string]: unknown;
|
|
2393
|
+
};
|
|
2394
|
+
content: {
|
|
2395
|
+
"application/json": components["schemas"]["Error"];
|
|
2396
|
+
};
|
|
2397
|
+
};
|
|
2398
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
2399
|
+
502: {
|
|
2400
|
+
headers: {
|
|
2401
|
+
[name: string]: unknown;
|
|
2402
|
+
};
|
|
2403
|
+
content: {
|
|
2404
|
+
"application/json": components["schemas"]["Error"];
|
|
2405
|
+
};
|
|
2406
|
+
};
|
|
2407
|
+
};
|
|
2408
|
+
};
|
|
2409
|
+
ignoreRepo: {
|
|
2410
|
+
parameters: {
|
|
2411
|
+
query?: never;
|
|
2412
|
+
header?: never;
|
|
2413
|
+
path?: never;
|
|
2414
|
+
cookie?: never;
|
|
2415
|
+
};
|
|
2416
|
+
requestBody: {
|
|
2417
|
+
content: {
|
|
2418
|
+
"application/json": components["schemas"]["RepoIgnoreRequest"];
|
|
2419
|
+
};
|
|
2420
|
+
};
|
|
2421
|
+
responses: {
|
|
2422
|
+
/** @description The repo is now ignored in the requested scope (or already was). */
|
|
2423
|
+
204: {
|
|
2424
|
+
headers: {
|
|
2425
|
+
[name: string]: unknown;
|
|
2426
|
+
};
|
|
2427
|
+
content?: never;
|
|
2428
|
+
};
|
|
2429
|
+
/**
|
|
2430
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2431
|
+
* "owner/repo", or both `prs` and `issues` were false.
|
|
2432
|
+
*/
|
|
2433
|
+
400: {
|
|
2434
|
+
headers: {
|
|
2435
|
+
[name: string]: unknown;
|
|
2436
|
+
};
|
|
2437
|
+
content: {
|
|
2438
|
+
"application/json": components["schemas"]["Error"];
|
|
2439
|
+
};
|
|
2440
|
+
};
|
|
2441
|
+
/** @description No valid session cookie was presented. */
|
|
2442
|
+
401: {
|
|
2443
|
+
headers: {
|
|
2444
|
+
[name: string]: unknown;
|
|
2445
|
+
};
|
|
2446
|
+
content: {
|
|
2447
|
+
"application/json": components["schemas"]["Error"];
|
|
2448
|
+
};
|
|
2449
|
+
};
|
|
2450
|
+
};
|
|
2451
|
+
};
|
|
2452
|
+
unignoreRepo: {
|
|
2453
|
+
parameters: {
|
|
2454
|
+
query?: never;
|
|
2455
|
+
header?: never;
|
|
2456
|
+
path?: never;
|
|
2457
|
+
cookie?: never;
|
|
2458
|
+
};
|
|
2459
|
+
requestBody: {
|
|
2460
|
+
content: {
|
|
2461
|
+
"application/json": components["schemas"]["WebhookEnsureRequest"];
|
|
2462
|
+
};
|
|
2463
|
+
};
|
|
2464
|
+
responses: {
|
|
2465
|
+
/** @description The repo is no longer ignored (or never was). */
|
|
2466
|
+
204: {
|
|
2467
|
+
headers: {
|
|
2468
|
+
[name: string]: unknown;
|
|
2469
|
+
};
|
|
2470
|
+
content?: never;
|
|
2471
|
+
};
|
|
2472
|
+
/** @description The request body wasn't valid JSON, or `fullName` wasn't "owner/repo". */
|
|
2473
|
+
400: {
|
|
2474
|
+
headers: {
|
|
2475
|
+
[name: string]: unknown;
|
|
2476
|
+
};
|
|
2477
|
+
content: {
|
|
2478
|
+
"application/json": components["schemas"]["Error"];
|
|
2479
|
+
};
|
|
2480
|
+
};
|
|
2481
|
+
/** @description No valid session cookie was presented. */
|
|
2482
|
+
401: {
|
|
2483
|
+
headers: {
|
|
2484
|
+
[name: string]: unknown;
|
|
2485
|
+
};
|
|
2486
|
+
content: {
|
|
2487
|
+
"application/json": components["schemas"]["Error"];
|
|
2488
|
+
};
|
|
2489
|
+
};
|
|
2490
|
+
};
|
|
2491
|
+
};
|
|
2492
|
+
enableAutoUpdateBranch: {
|
|
2493
|
+
parameters: {
|
|
2494
|
+
query?: never;
|
|
2495
|
+
header?: never;
|
|
2496
|
+
path?: never;
|
|
2497
|
+
cookie?: never;
|
|
2498
|
+
};
|
|
2499
|
+
requestBody: {
|
|
2500
|
+
content: {
|
|
2501
|
+
"application/json": components["schemas"]["WebhookEnsureRequest"];
|
|
2502
|
+
};
|
|
2503
|
+
};
|
|
2504
|
+
responses: {
|
|
2505
|
+
/** @description Auto-update-branch is now on for this repo (or already was). */
|
|
2506
|
+
204: {
|
|
2507
|
+
headers: {
|
|
2508
|
+
[name: string]: unknown;
|
|
2509
|
+
};
|
|
2510
|
+
content?: never;
|
|
2511
|
+
};
|
|
2512
|
+
/** @description The request body wasn't valid JSON, or `fullName` wasn't "owner/repo". */
|
|
2513
|
+
400: {
|
|
2514
|
+
headers: {
|
|
2515
|
+
[name: string]: unknown;
|
|
2516
|
+
};
|
|
2517
|
+
content: {
|
|
2518
|
+
"application/json": components["schemas"]["Error"];
|
|
2519
|
+
};
|
|
2520
|
+
};
|
|
2521
|
+
/** @description No valid session cookie was presented. */
|
|
2522
|
+
401: {
|
|
2523
|
+
headers: {
|
|
2524
|
+
[name: string]: unknown;
|
|
2525
|
+
};
|
|
2526
|
+
content: {
|
|
2527
|
+
"application/json": components["schemas"]["Error"];
|
|
2528
|
+
};
|
|
2529
|
+
};
|
|
2530
|
+
};
|
|
2531
|
+
};
|
|
2532
|
+
disableAutoUpdateBranch: {
|
|
2533
|
+
parameters: {
|
|
2534
|
+
query?: never;
|
|
2535
|
+
header?: never;
|
|
2536
|
+
path?: never;
|
|
2537
|
+
cookie?: never;
|
|
2538
|
+
};
|
|
2539
|
+
requestBody: {
|
|
2540
|
+
content: {
|
|
2541
|
+
"application/json": components["schemas"]["WebhookEnsureRequest"];
|
|
2542
|
+
};
|
|
2543
|
+
};
|
|
2544
|
+
responses: {
|
|
2545
|
+
/** @description Auto-update-branch is now off for this repo (or never was on). */
|
|
2546
|
+
204: {
|
|
2547
|
+
headers: {
|
|
2548
|
+
[name: string]: unknown;
|
|
2549
|
+
};
|
|
2550
|
+
content?: never;
|
|
2551
|
+
};
|
|
2552
|
+
/** @description The request body wasn't valid JSON, or `fullName` wasn't "owner/repo". */
|
|
2553
|
+
400: {
|
|
2554
|
+
headers: {
|
|
2555
|
+
[name: string]: unknown;
|
|
2556
|
+
};
|
|
2557
|
+
content: {
|
|
2558
|
+
"application/json": components["schemas"]["Error"];
|
|
2559
|
+
};
|
|
2560
|
+
};
|
|
2561
|
+
/** @description No valid session cookie was presented. */
|
|
2562
|
+
401: {
|
|
2563
|
+
headers: {
|
|
2564
|
+
[name: string]: unknown;
|
|
2565
|
+
};
|
|
2566
|
+
content: {
|
|
2567
|
+
"application/json": components["schemas"]["Error"];
|
|
2568
|
+
};
|
|
2569
|
+
};
|
|
2570
|
+
};
|
|
2571
|
+
};
|
|
2572
|
+
mergePullRequest: {
|
|
2573
|
+
parameters: {
|
|
2574
|
+
query?: never;
|
|
2575
|
+
header?: never;
|
|
2576
|
+
path?: never;
|
|
2577
|
+
cookie?: never;
|
|
2578
|
+
};
|
|
2579
|
+
requestBody: {
|
|
2580
|
+
content: {
|
|
2581
|
+
"application/json": components["schemas"]["PullRequestActionRequest"];
|
|
2582
|
+
};
|
|
2583
|
+
};
|
|
2584
|
+
responses: {
|
|
2585
|
+
/** @description Merged. */
|
|
2586
|
+
204: {
|
|
2587
|
+
headers: {
|
|
2588
|
+
[name: string]: unknown;
|
|
2589
|
+
};
|
|
2590
|
+
content?: never;
|
|
2591
|
+
};
|
|
2592
|
+
/**
|
|
2593
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2594
|
+
* "owner/repo", no credentials are saved for that forge, or
|
|
2595
|
+
* that forge's client doesn't support merging pull requests at
|
|
2596
|
+
* all.
|
|
2597
|
+
*/
|
|
2598
|
+
400: {
|
|
2599
|
+
headers: {
|
|
2600
|
+
[name: string]: unknown;
|
|
2601
|
+
};
|
|
2602
|
+
content: {
|
|
2603
|
+
"application/json": components["schemas"]["Error"];
|
|
2604
|
+
};
|
|
2605
|
+
};
|
|
2606
|
+
/** @description No valid session cookie was presented. */
|
|
2607
|
+
401: {
|
|
2608
|
+
headers: {
|
|
2609
|
+
[name: string]: unknown;
|
|
2610
|
+
};
|
|
2611
|
+
content: {
|
|
2612
|
+
"application/json": components["schemas"]["Error"];
|
|
2613
|
+
};
|
|
2614
|
+
};
|
|
2615
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover merging, or it isn't allowed to merge on that repo. */
|
|
2616
|
+
403: {
|
|
2617
|
+
headers: {
|
|
2618
|
+
[name: string]: unknown;
|
|
2619
|
+
};
|
|
2620
|
+
content: {
|
|
2621
|
+
"application/json": components["schemas"]["Error"];
|
|
2622
|
+
};
|
|
2623
|
+
};
|
|
2624
|
+
/** @description The forge reported the repo or pull request doesn't exist (or isn't visible to this token). */
|
|
2625
|
+
404: {
|
|
2626
|
+
headers: {
|
|
2627
|
+
[name: string]: unknown;
|
|
2628
|
+
};
|
|
2629
|
+
content: {
|
|
2630
|
+
"application/json": components["schemas"]["Error"];
|
|
2631
|
+
};
|
|
2632
|
+
};
|
|
2633
|
+
/** @description The forge rejected the merge because the pull request isn't currently mergeable — a real conflict, or its state changed since the dashboard's last refresh. */
|
|
2634
|
+
409: {
|
|
2635
|
+
headers: {
|
|
2636
|
+
[name: string]: unknown;
|
|
2637
|
+
};
|
|
2638
|
+
content: {
|
|
2639
|
+
"application/json": components["schemas"]["Error"];
|
|
2640
|
+
};
|
|
2641
|
+
};
|
|
2642
|
+
/** @description The forge rate-limited the request. */
|
|
2643
|
+
429: {
|
|
2644
|
+
headers: {
|
|
2645
|
+
[name: string]: unknown;
|
|
2646
|
+
};
|
|
2647
|
+
content: {
|
|
2648
|
+
"application/json": components["schemas"]["Error"];
|
|
2649
|
+
};
|
|
2650
|
+
};
|
|
2651
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
2652
|
+
502: {
|
|
2653
|
+
headers: {
|
|
2654
|
+
[name: string]: unknown;
|
|
2655
|
+
};
|
|
2656
|
+
content: {
|
|
2657
|
+
"application/json": components["schemas"]["Error"];
|
|
2658
|
+
};
|
|
2659
|
+
};
|
|
2660
|
+
};
|
|
2661
|
+
};
|
|
2662
|
+
closePullRequest: {
|
|
2663
|
+
parameters: {
|
|
2664
|
+
query?: never;
|
|
2665
|
+
header?: never;
|
|
2666
|
+
path?: never;
|
|
2667
|
+
cookie?: never;
|
|
2668
|
+
};
|
|
2669
|
+
requestBody: {
|
|
2670
|
+
content: {
|
|
2671
|
+
"application/json": components["schemas"]["PullRequestActionRequest"];
|
|
2672
|
+
};
|
|
2673
|
+
};
|
|
2674
|
+
responses: {
|
|
2675
|
+
/** @description Closed. */
|
|
2676
|
+
204: {
|
|
2677
|
+
headers: {
|
|
2678
|
+
[name: string]: unknown;
|
|
2679
|
+
};
|
|
2680
|
+
content?: never;
|
|
2681
|
+
};
|
|
2682
|
+
/**
|
|
2683
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2684
|
+
* "owner/repo", no credentials are saved for that forge, or
|
|
2685
|
+
* that forge's client doesn't support closing pull requests at
|
|
2686
|
+
* all.
|
|
2687
|
+
*/
|
|
2688
|
+
400: {
|
|
2689
|
+
headers: {
|
|
2690
|
+
[name: string]: unknown;
|
|
2691
|
+
};
|
|
2692
|
+
content: {
|
|
2693
|
+
"application/json": components["schemas"]["Error"];
|
|
2694
|
+
};
|
|
2695
|
+
};
|
|
2696
|
+
/** @description No valid session cookie was presented. */
|
|
2697
|
+
401: {
|
|
2698
|
+
headers: {
|
|
2699
|
+
[name: string]: unknown;
|
|
2700
|
+
};
|
|
2701
|
+
content: {
|
|
2702
|
+
"application/json": components["schemas"]["Error"];
|
|
2703
|
+
};
|
|
2704
|
+
};
|
|
2705
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover closing, or it isn't allowed to close on that repo. */
|
|
2706
|
+
403: {
|
|
2707
|
+
headers: {
|
|
2708
|
+
[name: string]: unknown;
|
|
2709
|
+
};
|
|
2710
|
+
content: {
|
|
2711
|
+
"application/json": components["schemas"]["Error"];
|
|
2712
|
+
};
|
|
2713
|
+
};
|
|
2714
|
+
/** @description The forge reported the repo or pull request doesn't exist (or isn't visible to this token). */
|
|
2715
|
+
404: {
|
|
2716
|
+
headers: {
|
|
2717
|
+
[name: string]: unknown;
|
|
2718
|
+
};
|
|
2719
|
+
content: {
|
|
2720
|
+
"application/json": components["schemas"]["Error"];
|
|
2721
|
+
};
|
|
2722
|
+
};
|
|
2723
|
+
/** @description The forge rate-limited the request. */
|
|
2724
|
+
429: {
|
|
2725
|
+
headers: {
|
|
2726
|
+
[name: string]: unknown;
|
|
2727
|
+
};
|
|
2728
|
+
content: {
|
|
2729
|
+
"application/json": components["schemas"]["Error"];
|
|
2730
|
+
};
|
|
2731
|
+
};
|
|
2732
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
2733
|
+
502: {
|
|
2734
|
+
headers: {
|
|
2735
|
+
[name: string]: unknown;
|
|
2736
|
+
};
|
|
2737
|
+
content: {
|
|
2738
|
+
"application/json": components["schemas"]["Error"];
|
|
2739
|
+
};
|
|
2740
|
+
};
|
|
2741
|
+
};
|
|
2742
|
+
};
|
|
2743
|
+
updatePullRequestBranch: {
|
|
2744
|
+
parameters: {
|
|
2745
|
+
query?: never;
|
|
2746
|
+
header?: never;
|
|
2747
|
+
path?: never;
|
|
2748
|
+
cookie?: never;
|
|
2749
|
+
};
|
|
2750
|
+
requestBody: {
|
|
2751
|
+
content: {
|
|
2752
|
+
"application/json": components["schemas"]["PullRequestActionRequest"];
|
|
2753
|
+
};
|
|
2754
|
+
};
|
|
2755
|
+
responses: {
|
|
2756
|
+
/** @description The forge scheduled the update as a background job rather than finishing it inline. Not a failure — a follow-up refresh reflects the result once it lands. */
|
|
2757
|
+
202: {
|
|
2758
|
+
headers: {
|
|
2759
|
+
[name: string]: unknown;
|
|
2760
|
+
};
|
|
2761
|
+
content?: never;
|
|
2762
|
+
};
|
|
2763
|
+
/** @description Updated. */
|
|
2764
|
+
204: {
|
|
2765
|
+
headers: {
|
|
2766
|
+
[name: string]: unknown;
|
|
2767
|
+
};
|
|
2768
|
+
content?: never;
|
|
2769
|
+
};
|
|
2770
|
+
/**
|
|
2771
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2772
|
+
* "owner/repo", no credentials are saved for that forge, or
|
|
2773
|
+
* that forge's client doesn't support updating pull request
|
|
2774
|
+
* branches at all.
|
|
2775
|
+
*/
|
|
2776
|
+
400: {
|
|
2777
|
+
headers: {
|
|
2778
|
+
[name: string]: unknown;
|
|
2779
|
+
};
|
|
2780
|
+
content: {
|
|
2781
|
+
"application/json": components["schemas"]["Error"];
|
|
2782
|
+
};
|
|
2783
|
+
};
|
|
2784
|
+
/** @description No valid session cookie was presented. */
|
|
2785
|
+
401: {
|
|
2786
|
+
headers: {
|
|
2787
|
+
[name: string]: unknown;
|
|
2788
|
+
};
|
|
2789
|
+
content: {
|
|
2790
|
+
"application/json": components["schemas"]["Error"];
|
|
2791
|
+
};
|
|
2792
|
+
};
|
|
2793
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover updating the branch, or it isn't allowed to push on that repo. */
|
|
2794
|
+
403: {
|
|
2795
|
+
headers: {
|
|
2796
|
+
[name: string]: unknown;
|
|
2797
|
+
};
|
|
2798
|
+
content: {
|
|
2799
|
+
"application/json": components["schemas"]["Error"];
|
|
2800
|
+
};
|
|
2801
|
+
};
|
|
2802
|
+
/** @description The forge reported the repo or pull request doesn't exist (or isn't visible to this token). */
|
|
2803
|
+
404: {
|
|
2804
|
+
headers: {
|
|
2805
|
+
[name: string]: unknown;
|
|
2806
|
+
};
|
|
2807
|
+
content: {
|
|
2808
|
+
"application/json": components["schemas"]["Error"];
|
|
2809
|
+
};
|
|
2810
|
+
};
|
|
2811
|
+
/** @description The forge rejected the update because the branches can't be merged cleanly — a real conflict updating would need to resolve by hand. */
|
|
2812
|
+
409: {
|
|
2813
|
+
headers: {
|
|
2814
|
+
[name: string]: unknown;
|
|
2815
|
+
};
|
|
2816
|
+
content: {
|
|
2817
|
+
"application/json": components["schemas"]["Error"];
|
|
2818
|
+
};
|
|
2819
|
+
};
|
|
2820
|
+
/** @description The forge rate-limited the request. */
|
|
2821
|
+
429: {
|
|
2822
|
+
headers: {
|
|
2823
|
+
[name: string]: unknown;
|
|
2824
|
+
};
|
|
2825
|
+
content: {
|
|
2826
|
+
"application/json": components["schemas"]["Error"];
|
|
2827
|
+
};
|
|
2828
|
+
};
|
|
2829
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
2830
|
+
502: {
|
|
2831
|
+
headers: {
|
|
2832
|
+
[name: string]: unknown;
|
|
2833
|
+
};
|
|
2834
|
+
content: {
|
|
2835
|
+
"application/json": components["schemas"]["Error"];
|
|
2836
|
+
};
|
|
2837
|
+
};
|
|
2838
|
+
};
|
|
2839
|
+
};
|
|
2840
|
+
postPullRequestDependabotAction: {
|
|
2841
|
+
parameters: {
|
|
2842
|
+
query?: never;
|
|
2843
|
+
header?: never;
|
|
2844
|
+
path?: never;
|
|
2845
|
+
cookie?: never;
|
|
2846
|
+
};
|
|
2847
|
+
requestBody: {
|
|
2848
|
+
content: {
|
|
2849
|
+
"application/json": components["schemas"]["PullRequestDependabotActionRequest"];
|
|
2850
|
+
};
|
|
2851
|
+
};
|
|
2852
|
+
responses: {
|
|
2853
|
+
/** @description Comment posted. */
|
|
2854
|
+
204: {
|
|
2855
|
+
headers: {
|
|
2856
|
+
[name: string]: unknown;
|
|
2857
|
+
};
|
|
2858
|
+
content?: never;
|
|
2859
|
+
};
|
|
2860
|
+
/**
|
|
2861
|
+
* @description The request body wasn't valid JSON, `action` wasn't "rebase"
|
|
2862
|
+
* or "recreate", `fullName` wasn't "owner/repo", no credentials
|
|
2863
|
+
* are saved for that forge, or that forge's client doesn't
|
|
2864
|
+
* support commenting on pull requests at all.
|
|
2865
|
+
*/
|
|
2866
|
+
400: {
|
|
2867
|
+
headers: {
|
|
2868
|
+
[name: string]: unknown;
|
|
2869
|
+
};
|
|
2870
|
+
content: {
|
|
2871
|
+
"application/json": components["schemas"]["Error"];
|
|
2872
|
+
};
|
|
2873
|
+
};
|
|
2874
|
+
/** @description No valid session cookie was presented. */
|
|
2875
|
+
401: {
|
|
2876
|
+
headers: {
|
|
2877
|
+
[name: string]: unknown;
|
|
2878
|
+
};
|
|
2879
|
+
content: {
|
|
2880
|
+
"application/json": components["schemas"]["Error"];
|
|
2881
|
+
};
|
|
2882
|
+
};
|
|
2883
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover commenting, or it isn't allowed to comment on that repo. */
|
|
2884
|
+
403: {
|
|
2885
|
+
headers: {
|
|
2886
|
+
[name: string]: unknown;
|
|
2887
|
+
};
|
|
2888
|
+
content: {
|
|
2889
|
+
"application/json": components["schemas"]["Error"];
|
|
2890
|
+
};
|
|
2891
|
+
};
|
|
2892
|
+
/** @description The forge reported the repo or pull request doesn't exist (or isn't visible to this token). */
|
|
2893
|
+
404: {
|
|
2894
|
+
headers: {
|
|
2895
|
+
[name: string]: unknown;
|
|
2896
|
+
};
|
|
2897
|
+
content: {
|
|
2898
|
+
"application/json": components["schemas"]["Error"];
|
|
2899
|
+
};
|
|
2900
|
+
};
|
|
2901
|
+
/** @description The forge rejected the comment because of the pull request's current state. */
|
|
2902
|
+
409: {
|
|
2903
|
+
headers: {
|
|
2904
|
+
[name: string]: unknown;
|
|
2905
|
+
};
|
|
2906
|
+
content: {
|
|
2907
|
+
"application/json": components["schemas"]["Error"];
|
|
2908
|
+
};
|
|
2909
|
+
};
|
|
2910
|
+
/** @description The forge rate-limited the request. */
|
|
2911
|
+
429: {
|
|
2912
|
+
headers: {
|
|
2913
|
+
[name: string]: unknown;
|
|
2914
|
+
};
|
|
2915
|
+
content: {
|
|
2916
|
+
"application/json": components["schemas"]["Error"];
|
|
2917
|
+
};
|
|
2918
|
+
};
|
|
2919
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
2920
|
+
502: {
|
|
2921
|
+
headers: {
|
|
2922
|
+
[name: string]: unknown;
|
|
2923
|
+
};
|
|
2924
|
+
content: {
|
|
2925
|
+
"application/json": components["schemas"]["Error"];
|
|
2926
|
+
};
|
|
2927
|
+
};
|
|
2928
|
+
};
|
|
2929
|
+
};
|
|
2930
|
+
postPullRequestRenovateRebase: {
|
|
2931
|
+
parameters: {
|
|
2932
|
+
query?: never;
|
|
2933
|
+
header?: never;
|
|
2934
|
+
path?: never;
|
|
2935
|
+
cookie?: never;
|
|
2936
|
+
};
|
|
2937
|
+
requestBody: {
|
|
2938
|
+
content: {
|
|
2939
|
+
"application/json": components["schemas"]["PullRequestActionRequest"];
|
|
2940
|
+
};
|
|
2941
|
+
};
|
|
2942
|
+
responses: {
|
|
2943
|
+
/** @description Label added. */
|
|
2944
|
+
204: {
|
|
2945
|
+
headers: {
|
|
2946
|
+
[name: string]: unknown;
|
|
2947
|
+
};
|
|
2948
|
+
content?: never;
|
|
2949
|
+
};
|
|
2950
|
+
/**
|
|
2951
|
+
* @description The request body wasn't valid JSON, `fullName` wasn't
|
|
2952
|
+
* "owner/repo", no credentials are saved for that forge, or
|
|
2953
|
+
* that forge's client doesn't support labeling pull requests
|
|
2954
|
+
* at all.
|
|
2955
|
+
*/
|
|
2956
|
+
400: {
|
|
2957
|
+
headers: {
|
|
2958
|
+
[name: string]: unknown;
|
|
2959
|
+
};
|
|
2960
|
+
content: {
|
|
2961
|
+
"application/json": components["schemas"]["Error"];
|
|
2962
|
+
};
|
|
2963
|
+
};
|
|
2964
|
+
/** @description No valid session cookie was presented. */
|
|
2965
|
+
401: {
|
|
2966
|
+
headers: {
|
|
2967
|
+
[name: string]: unknown;
|
|
2968
|
+
};
|
|
2969
|
+
content: {
|
|
2970
|
+
"application/json": components["schemas"]["Error"];
|
|
2971
|
+
};
|
|
2972
|
+
};
|
|
2973
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover labeling, or it isn't allowed to label on that repo. */
|
|
2974
|
+
403: {
|
|
2975
|
+
headers: {
|
|
2976
|
+
[name: string]: unknown;
|
|
2977
|
+
};
|
|
2978
|
+
content: {
|
|
2979
|
+
"application/json": components["schemas"]["Error"];
|
|
2980
|
+
};
|
|
2981
|
+
};
|
|
2982
|
+
/** @description The forge reported the repo or pull request doesn't exist, or (Forgejo only) the configured label doesn't exist on that repo — Forgejo's labels API takes an existing label's ID, not an arbitrary name, so it has to already be there. */
|
|
2983
|
+
404: {
|
|
2984
|
+
headers: {
|
|
2985
|
+
[name: string]: unknown;
|
|
2986
|
+
};
|
|
2987
|
+
content: {
|
|
2988
|
+
"application/json": components["schemas"]["Error"];
|
|
2989
|
+
};
|
|
2990
|
+
};
|
|
2991
|
+
/** @description The forge rate-limited the request. */
|
|
2992
|
+
429: {
|
|
2993
|
+
headers: {
|
|
2994
|
+
[name: string]: unknown;
|
|
2995
|
+
};
|
|
2996
|
+
content: {
|
|
2997
|
+
"application/json": components["schemas"]["Error"];
|
|
2998
|
+
};
|
|
2999
|
+
};
|
|
3000
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
3001
|
+
502: {
|
|
3002
|
+
headers: {
|
|
3003
|
+
[name: string]: unknown;
|
|
3004
|
+
};
|
|
3005
|
+
content: {
|
|
3006
|
+
"application/json": components["schemas"]["Error"];
|
|
3007
|
+
};
|
|
3008
|
+
};
|
|
3009
|
+
};
|
|
3010
|
+
};
|
|
3011
|
+
getPullRequestChecks: {
|
|
3012
|
+
parameters: {
|
|
3013
|
+
query: {
|
|
3014
|
+
forge: components["schemas"]["Forge"];
|
|
3015
|
+
/** @description "owner/repo", matching a Repo.fullName from GET /api/dashboard. */
|
|
3016
|
+
fullName: string;
|
|
3017
|
+
/** @description Matching a PullRequest.number from GET /api/dashboard. */
|
|
3018
|
+
number: number;
|
|
3019
|
+
};
|
|
3020
|
+
header?: never;
|
|
3021
|
+
path?: never;
|
|
3022
|
+
cookie?: never;
|
|
3023
|
+
};
|
|
3024
|
+
requestBody?: never;
|
|
3025
|
+
responses: {
|
|
3026
|
+
/** @description Every check/job found for that commit — empty when none were. */
|
|
3027
|
+
200: {
|
|
3028
|
+
headers: {
|
|
3029
|
+
[name: string]: unknown;
|
|
3030
|
+
};
|
|
3031
|
+
content: {
|
|
3032
|
+
"application/json": components["schemas"]["PullRequestChecksResponse"];
|
|
3033
|
+
};
|
|
3034
|
+
};
|
|
3035
|
+
/** @description `number` wasn't an integer, `fullName` wasn't "owner/repo", no credentials are saved for that forge, or that forge's client doesn't support listing pull request checks at all. */
|
|
3036
|
+
400: {
|
|
3037
|
+
headers: {
|
|
3038
|
+
[name: string]: unknown;
|
|
3039
|
+
};
|
|
3040
|
+
content: {
|
|
3041
|
+
"application/json": components["schemas"]["Error"];
|
|
3042
|
+
};
|
|
3043
|
+
};
|
|
3044
|
+
/** @description No valid session cookie was presented. */
|
|
3045
|
+
401: {
|
|
3046
|
+
headers: {
|
|
3047
|
+
[name: string]: unknown;
|
|
3048
|
+
};
|
|
3049
|
+
content: {
|
|
3050
|
+
"application/json": components["schemas"]["Error"];
|
|
3051
|
+
};
|
|
3052
|
+
};
|
|
3053
|
+
/** @description The forge rejected the request as unauthorized — the saved token's scope doesn't cover reading checks, or it isn't allowed to see that repo. */
|
|
3054
|
+
403: {
|
|
3055
|
+
headers: {
|
|
3056
|
+
[name: string]: unknown;
|
|
3057
|
+
};
|
|
3058
|
+
content: {
|
|
3059
|
+
"application/json": components["schemas"]["Error"];
|
|
3060
|
+
};
|
|
3061
|
+
};
|
|
3062
|
+
/** @description The forge reported the repo or pull request doesn't exist (or isn't visible to this token). */
|
|
3063
|
+
404: {
|
|
3064
|
+
headers: {
|
|
3065
|
+
[name: string]: unknown;
|
|
3066
|
+
};
|
|
3067
|
+
content: {
|
|
3068
|
+
"application/json": components["schemas"]["Error"];
|
|
3069
|
+
};
|
|
3070
|
+
};
|
|
3071
|
+
/** @description The forge rate-limited the request. */
|
|
3072
|
+
429: {
|
|
3073
|
+
headers: {
|
|
3074
|
+
[name: string]: unknown;
|
|
3075
|
+
};
|
|
3076
|
+
content: {
|
|
3077
|
+
"application/json": components["schemas"]["Error"];
|
|
3078
|
+
};
|
|
3079
|
+
};
|
|
3080
|
+
/** @description The forge was unreachable, or answered with something this app couldn't classify more specifically. */
|
|
3081
|
+
502: {
|
|
3082
|
+
headers: {
|
|
3083
|
+
[name: string]: unknown;
|
|
3084
|
+
};
|
|
3085
|
+
content: {
|
|
3086
|
+
"application/json": components["schemas"]["Error"];
|
|
3087
|
+
};
|
|
3088
|
+
};
|
|
3089
|
+
};
|
|
3090
|
+
};
|
|
3091
|
+
listUsers: {
|
|
3092
|
+
parameters: {
|
|
3093
|
+
query?: never;
|
|
3094
|
+
header?: never;
|
|
3095
|
+
path?: never;
|
|
3096
|
+
cookie?: never;
|
|
3097
|
+
};
|
|
3098
|
+
requestBody?: never;
|
|
3099
|
+
responses: {
|
|
3100
|
+
/** @description Every registered user. */
|
|
3101
|
+
200: {
|
|
3102
|
+
headers: {
|
|
3103
|
+
[name: string]: unknown;
|
|
3104
|
+
};
|
|
3105
|
+
content: {
|
|
3106
|
+
"application/json": components["schemas"]["AdminUser"][];
|
|
3107
|
+
};
|
|
3108
|
+
};
|
|
3109
|
+
/** @description No valid session cookie was presented. */
|
|
3110
|
+
401: {
|
|
3111
|
+
headers: {
|
|
3112
|
+
[name: string]: unknown;
|
|
3113
|
+
};
|
|
3114
|
+
content: {
|
|
3115
|
+
"application/json": components["schemas"]["Error"];
|
|
3116
|
+
};
|
|
3117
|
+
};
|
|
3118
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3119
|
+
403: {
|
|
3120
|
+
headers: {
|
|
3121
|
+
[name: string]: unknown;
|
|
3122
|
+
};
|
|
3123
|
+
content: {
|
|
3124
|
+
"application/json": components["schemas"]["Error"];
|
|
3125
|
+
};
|
|
3126
|
+
};
|
|
3127
|
+
};
|
|
3128
|
+
};
|
|
3129
|
+
revokeUser: {
|
|
3130
|
+
parameters: {
|
|
3131
|
+
query?: never;
|
|
3132
|
+
header?: never;
|
|
3133
|
+
path: {
|
|
3134
|
+
username: components["parameters"]["PathUsername"];
|
|
3135
|
+
};
|
|
3136
|
+
cookie?: never;
|
|
3137
|
+
};
|
|
3138
|
+
requestBody?: never;
|
|
3139
|
+
responses: {
|
|
3140
|
+
/** @description Revoked. */
|
|
3141
|
+
204: {
|
|
3142
|
+
headers: {
|
|
3143
|
+
[name: string]: unknown;
|
|
3144
|
+
};
|
|
3145
|
+
content?: never;
|
|
3146
|
+
};
|
|
3147
|
+
/** @description An admin can't revoke their own account through this endpoint. */
|
|
3148
|
+
400: {
|
|
3149
|
+
headers: {
|
|
3150
|
+
[name: string]: unknown;
|
|
3151
|
+
};
|
|
3152
|
+
content: {
|
|
3153
|
+
"application/json": components["schemas"]["Error"];
|
|
3154
|
+
};
|
|
3155
|
+
};
|
|
3156
|
+
/** @description No valid session cookie was presented. */
|
|
3157
|
+
401: {
|
|
3158
|
+
headers: {
|
|
3159
|
+
[name: string]: unknown;
|
|
3160
|
+
};
|
|
3161
|
+
content: {
|
|
3162
|
+
"application/json": components["schemas"]["Error"];
|
|
3163
|
+
};
|
|
3164
|
+
};
|
|
3165
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3166
|
+
403: {
|
|
3167
|
+
headers: {
|
|
3168
|
+
[name: string]: unknown;
|
|
3169
|
+
};
|
|
3170
|
+
content: {
|
|
3171
|
+
"application/json": components["schemas"]["Error"];
|
|
3172
|
+
};
|
|
3173
|
+
};
|
|
3174
|
+
/** @description No user is registered under that username. */
|
|
3175
|
+
404: {
|
|
3176
|
+
headers: {
|
|
3177
|
+
[name: string]: unknown;
|
|
3178
|
+
};
|
|
3179
|
+
content: {
|
|
3180
|
+
"application/json": components["schemas"]["Error"];
|
|
3181
|
+
};
|
|
3182
|
+
};
|
|
3183
|
+
};
|
|
3184
|
+
};
|
|
3185
|
+
deleteUser: {
|
|
3186
|
+
parameters: {
|
|
3187
|
+
query?: never;
|
|
3188
|
+
header?: never;
|
|
3189
|
+
path: {
|
|
3190
|
+
username: components["parameters"]["PathUsername"];
|
|
3191
|
+
};
|
|
3192
|
+
cookie?: never;
|
|
3193
|
+
};
|
|
3194
|
+
requestBody?: never;
|
|
3195
|
+
responses: {
|
|
3196
|
+
/** @description Removed. */
|
|
3197
|
+
204: {
|
|
3198
|
+
headers: {
|
|
3199
|
+
[name: string]: unknown;
|
|
3200
|
+
};
|
|
3201
|
+
content?: never;
|
|
3202
|
+
};
|
|
3203
|
+
/** @description An admin can't remove their own account through this endpoint. */
|
|
3204
|
+
400: {
|
|
3205
|
+
headers: {
|
|
3206
|
+
[name: string]: unknown;
|
|
3207
|
+
};
|
|
3208
|
+
content: {
|
|
3209
|
+
"application/json": components["schemas"]["Error"];
|
|
3210
|
+
};
|
|
3211
|
+
};
|
|
3212
|
+
/** @description No valid session cookie was presented. */
|
|
3213
|
+
401: {
|
|
3214
|
+
headers: {
|
|
3215
|
+
[name: string]: unknown;
|
|
3216
|
+
};
|
|
3217
|
+
content: {
|
|
3218
|
+
"application/json": components["schemas"]["Error"];
|
|
3219
|
+
};
|
|
3220
|
+
};
|
|
3221
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3222
|
+
403: {
|
|
3223
|
+
headers: {
|
|
3224
|
+
[name: string]: unknown;
|
|
3225
|
+
};
|
|
3226
|
+
content: {
|
|
3227
|
+
"application/json": components["schemas"]["Error"];
|
|
3228
|
+
};
|
|
3229
|
+
};
|
|
3230
|
+
/** @description No user is registered under that username. */
|
|
3231
|
+
404: {
|
|
3232
|
+
headers: {
|
|
3233
|
+
[name: string]: unknown;
|
|
3234
|
+
};
|
|
3235
|
+
content: {
|
|
3236
|
+
"application/json": components["schemas"]["Error"];
|
|
3237
|
+
};
|
|
3238
|
+
};
|
|
3239
|
+
};
|
|
3240
|
+
};
|
|
3241
|
+
listInvites: {
|
|
3242
|
+
parameters: {
|
|
3243
|
+
query?: never;
|
|
3244
|
+
header?: never;
|
|
3245
|
+
path?: never;
|
|
3246
|
+
cookie?: never;
|
|
3247
|
+
};
|
|
3248
|
+
requestBody?: never;
|
|
3249
|
+
responses: {
|
|
3250
|
+
/** @description Every outstanding invite. */
|
|
3251
|
+
200: {
|
|
3252
|
+
headers: {
|
|
3253
|
+
[name: string]: unknown;
|
|
3254
|
+
};
|
|
3255
|
+
content: {
|
|
3256
|
+
"application/json": components["schemas"]["AdminInvite"][];
|
|
3257
|
+
};
|
|
3258
|
+
};
|
|
3259
|
+
/** @description No valid session cookie was presented. */
|
|
3260
|
+
401: {
|
|
3261
|
+
headers: {
|
|
3262
|
+
[name: string]: unknown;
|
|
3263
|
+
};
|
|
3264
|
+
content: {
|
|
3265
|
+
"application/json": components["schemas"]["Error"];
|
|
3266
|
+
};
|
|
3267
|
+
};
|
|
3268
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3269
|
+
403: {
|
|
3270
|
+
headers: {
|
|
3271
|
+
[name: string]: unknown;
|
|
3272
|
+
};
|
|
3273
|
+
content: {
|
|
3274
|
+
"application/json": components["schemas"]["Error"];
|
|
3275
|
+
};
|
|
3276
|
+
};
|
|
3277
|
+
};
|
|
3278
|
+
};
|
|
3279
|
+
createInvite: {
|
|
3280
|
+
parameters: {
|
|
3281
|
+
query?: never;
|
|
3282
|
+
header?: never;
|
|
3283
|
+
path?: never;
|
|
3284
|
+
cookie?: never;
|
|
3285
|
+
};
|
|
3286
|
+
requestBody: {
|
|
3287
|
+
content: {
|
|
3288
|
+
"application/json": components["schemas"]["AdminInviteCreateRequest"];
|
|
3289
|
+
};
|
|
3290
|
+
};
|
|
3291
|
+
responses: {
|
|
3292
|
+
/** @description Created — the only response that ever carries the raw token. */
|
|
3293
|
+
201: {
|
|
3294
|
+
headers: {
|
|
3295
|
+
[name: string]: unknown;
|
|
3296
|
+
};
|
|
3297
|
+
content: {
|
|
3298
|
+
"application/json": components["schemas"]["AdminInviteCreateResponse"];
|
|
3299
|
+
};
|
|
3300
|
+
};
|
|
3301
|
+
/** @description username or displayName was blank. */
|
|
3302
|
+
400: {
|
|
3303
|
+
headers: {
|
|
3304
|
+
[name: string]: unknown;
|
|
3305
|
+
};
|
|
3306
|
+
content: {
|
|
3307
|
+
"application/json": components["schemas"]["Error"];
|
|
3308
|
+
};
|
|
3309
|
+
};
|
|
3310
|
+
/** @description No valid session cookie was presented. */
|
|
3311
|
+
401: {
|
|
3312
|
+
headers: {
|
|
3313
|
+
[name: string]: unknown;
|
|
3314
|
+
};
|
|
3315
|
+
content: {
|
|
3316
|
+
"application/json": components["schemas"]["Error"];
|
|
3317
|
+
};
|
|
3318
|
+
};
|
|
3319
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3320
|
+
403: {
|
|
3321
|
+
headers: {
|
|
3322
|
+
[name: string]: unknown;
|
|
3323
|
+
};
|
|
3324
|
+
content: {
|
|
3325
|
+
"application/json": components["schemas"]["Error"];
|
|
3326
|
+
};
|
|
3327
|
+
};
|
|
3328
|
+
/** @description That username is already registered. */
|
|
3329
|
+
409: {
|
|
3330
|
+
headers: {
|
|
3331
|
+
[name: string]: unknown;
|
|
3332
|
+
};
|
|
3333
|
+
content: {
|
|
3334
|
+
"application/json": components["schemas"]["Error"];
|
|
3335
|
+
};
|
|
3336
|
+
};
|
|
3337
|
+
};
|
|
3338
|
+
};
|
|
3339
|
+
revokeInvite: {
|
|
3340
|
+
parameters: {
|
|
3341
|
+
query?: never;
|
|
3342
|
+
header?: never;
|
|
3343
|
+
path: {
|
|
3344
|
+
token: string;
|
|
3345
|
+
};
|
|
3346
|
+
cookie?: never;
|
|
3347
|
+
};
|
|
3348
|
+
requestBody?: never;
|
|
3349
|
+
responses: {
|
|
3350
|
+
/** @description Revoked. */
|
|
3351
|
+
204: {
|
|
3352
|
+
headers: {
|
|
3353
|
+
[name: string]: unknown;
|
|
3354
|
+
};
|
|
3355
|
+
content?: never;
|
|
3356
|
+
};
|
|
3357
|
+
/** @description No valid session cookie was presented. */
|
|
3358
|
+
401: {
|
|
3359
|
+
headers: {
|
|
3360
|
+
[name: string]: unknown;
|
|
3361
|
+
};
|
|
3362
|
+
content: {
|
|
3363
|
+
"application/json": components["schemas"]["Error"];
|
|
3364
|
+
};
|
|
3365
|
+
};
|
|
3366
|
+
/** @description The signed-in user isn't the designated admin. */
|
|
3367
|
+
403: {
|
|
3368
|
+
headers: {
|
|
3369
|
+
[name: string]: unknown;
|
|
3370
|
+
};
|
|
3371
|
+
content: {
|
|
3372
|
+
"application/json": components["schemas"]["Error"];
|
|
3373
|
+
};
|
|
3374
|
+
};
|
|
3375
|
+
/** @description No outstanding invite with that id. */
|
|
3376
|
+
404: {
|
|
3377
|
+
headers: {
|
|
3378
|
+
[name: string]: unknown;
|
|
3379
|
+
};
|
|
3380
|
+
content: {
|
|
3381
|
+
"application/json": components["schemas"]["Error"];
|
|
3382
|
+
};
|
|
3383
|
+
};
|
|
3384
|
+
};
|
|
3385
|
+
};
|
|
3386
|
+
health: {
|
|
3387
|
+
parameters: {
|
|
3388
|
+
query?: never;
|
|
3389
|
+
header?: never;
|
|
3390
|
+
path?: never;
|
|
3391
|
+
cookie?: never;
|
|
3392
|
+
};
|
|
3393
|
+
requestBody?: never;
|
|
3394
|
+
responses: {
|
|
3395
|
+
/** @description The process is up. */
|
|
3396
|
+
200: {
|
|
3397
|
+
headers: {
|
|
3398
|
+
[name: string]: unknown;
|
|
3399
|
+
};
|
|
3400
|
+
content: {
|
|
3401
|
+
/**
|
|
3402
|
+
* @example {
|
|
3403
|
+
* "status": "ok"
|
|
3404
|
+
* }
|
|
3405
|
+
*/
|
|
3406
|
+
"application/json": components["schemas"]["Health"];
|
|
3407
|
+
};
|
|
3408
|
+
};
|
|
3409
|
+
};
|
|
3410
|
+
};
|
|
3411
|
+
getVersion: {
|
|
3412
|
+
parameters: {
|
|
3413
|
+
query?: never;
|
|
3414
|
+
header?: never;
|
|
3415
|
+
path?: never;
|
|
3416
|
+
cookie?: never;
|
|
3417
|
+
};
|
|
3418
|
+
requestBody?: never;
|
|
3419
|
+
responses: {
|
|
3420
|
+
/** @description The running version. */
|
|
3421
|
+
200: {
|
|
3422
|
+
headers: {
|
|
3423
|
+
[name: string]: unknown;
|
|
3424
|
+
};
|
|
3425
|
+
content: {
|
|
3426
|
+
/**
|
|
3427
|
+
* @example {
|
|
3428
|
+
* "version": "0.12.1"
|
|
3429
|
+
* }
|
|
3430
|
+
*/
|
|
3431
|
+
"application/json": components["schemas"]["Version"];
|
|
3432
|
+
};
|
|
3433
|
+
};
|
|
3434
|
+
};
|
|
3435
|
+
};
|
|
3436
|
+
getDashboard: {
|
|
3437
|
+
parameters: {
|
|
3438
|
+
query?: {
|
|
3439
|
+
/** @description A username that has shared their dashboard with the caller. Defaults to the caller's own. */
|
|
3440
|
+
owner?: string;
|
|
3441
|
+
};
|
|
3442
|
+
header?: never;
|
|
3443
|
+
path?: never;
|
|
3444
|
+
cookie?: never;
|
|
3445
|
+
};
|
|
3446
|
+
requestBody?: never;
|
|
3447
|
+
responses: {
|
|
3448
|
+
/** @description The current snapshot. */
|
|
3449
|
+
200: {
|
|
3450
|
+
headers: {
|
|
3451
|
+
[name: string]: unknown;
|
|
3452
|
+
};
|
|
3453
|
+
content: {
|
|
3454
|
+
"application/json": components["schemas"]["Dashboard"];
|
|
3455
|
+
};
|
|
3456
|
+
};
|
|
3457
|
+
/** @description No valid session cookie was presented. */
|
|
3458
|
+
401: {
|
|
3459
|
+
headers: {
|
|
3460
|
+
[name: string]: unknown;
|
|
3461
|
+
};
|
|
3462
|
+
content: {
|
|
3463
|
+
"application/json": components["schemas"]["Error"];
|
|
3464
|
+
};
|
|
3465
|
+
};
|
|
3466
|
+
/** @description owner hasn't shared their dashboard with the signed-in user. */
|
|
3467
|
+
403: {
|
|
3468
|
+
headers: {
|
|
3469
|
+
[name: string]: unknown;
|
|
3470
|
+
};
|
|
3471
|
+
content: {
|
|
3472
|
+
"application/json": components["schemas"]["Error"];
|
|
3473
|
+
};
|
|
3474
|
+
};
|
|
3475
|
+
/** @description No user is registered under owner. */
|
|
3476
|
+
404: {
|
|
3477
|
+
headers: {
|
|
3478
|
+
[name: string]: unknown;
|
|
3479
|
+
};
|
|
3480
|
+
content: {
|
|
3481
|
+
"application/json": components["schemas"]["Error"];
|
|
3482
|
+
};
|
|
3483
|
+
};
|
|
3484
|
+
};
|
|
3485
|
+
};
|
|
3486
|
+
streamDashboard: {
|
|
3487
|
+
parameters: {
|
|
3488
|
+
query?: never;
|
|
3489
|
+
header?: never;
|
|
3490
|
+
path?: never;
|
|
3491
|
+
cookie?: never;
|
|
3492
|
+
};
|
|
3493
|
+
requestBody?: never;
|
|
3494
|
+
responses: {
|
|
3495
|
+
/**
|
|
3496
|
+
* @description An SSE stream. Each event's `data` field is a JSON-encoded
|
|
3497
|
+
* snapshot, identical in shape to GET /api/dashboard's
|
|
3498
|
+
* response body.
|
|
3499
|
+
*/
|
|
3500
|
+
200: {
|
|
3501
|
+
headers: {
|
|
3502
|
+
[name: string]: unknown;
|
|
3503
|
+
};
|
|
3504
|
+
content: {
|
|
3505
|
+
"text/event-stream": components["schemas"]["Dashboard"];
|
|
3506
|
+
};
|
|
3507
|
+
};
|
|
3508
|
+
/** @description No valid session cookie was presented. */
|
|
3509
|
+
401: {
|
|
3510
|
+
headers: {
|
|
3511
|
+
[name: string]: unknown;
|
|
3512
|
+
};
|
|
3513
|
+
content: {
|
|
3514
|
+
"application/json": components["schemas"]["Error"];
|
|
3515
|
+
};
|
|
3516
|
+
};
|
|
3517
|
+
/** @description No background refresh is running yet for this user — Settings has never been saved. */
|
|
3518
|
+
404: {
|
|
3519
|
+
headers: {
|
|
3520
|
+
[name: string]: unknown;
|
|
3521
|
+
};
|
|
3522
|
+
content: {
|
|
3523
|
+
"application/json": components["schemas"]["Error"];
|
|
3524
|
+
};
|
|
3525
|
+
};
|
|
3526
|
+
};
|
|
3527
|
+
};
|
|
3528
|
+
refreshDashboard: {
|
|
3529
|
+
parameters: {
|
|
3530
|
+
query?: never;
|
|
3531
|
+
header?: never;
|
|
3532
|
+
path?: never;
|
|
3533
|
+
cookie?: never;
|
|
3534
|
+
};
|
|
3535
|
+
requestBody?: never;
|
|
3536
|
+
responses: {
|
|
3537
|
+
/** @description The freshly refreshed snapshot. */
|
|
3538
|
+
200: {
|
|
3539
|
+
headers: {
|
|
3540
|
+
[name: string]: unknown;
|
|
3541
|
+
};
|
|
3542
|
+
content: {
|
|
3543
|
+
"application/json": components["schemas"]["Dashboard"];
|
|
3544
|
+
};
|
|
3545
|
+
};
|
|
3546
|
+
/** @description No valid session cookie was presented. */
|
|
3547
|
+
401: {
|
|
3548
|
+
headers: {
|
|
3549
|
+
[name: string]: unknown;
|
|
3550
|
+
};
|
|
3551
|
+
content: {
|
|
3552
|
+
"application/json": components["schemas"]["Error"];
|
|
3553
|
+
};
|
|
3554
|
+
};
|
|
3555
|
+
/** @description No background refresh is running yet for this user — Settings has never been saved. */
|
|
3556
|
+
404: {
|
|
3557
|
+
headers: {
|
|
3558
|
+
[name: string]: unknown;
|
|
3559
|
+
};
|
|
3560
|
+
content: {
|
|
3561
|
+
"application/json": components["schemas"]["Error"];
|
|
3562
|
+
};
|
|
3563
|
+
};
|
|
3564
|
+
};
|
|
3565
|
+
};
|
|
3566
|
+
getSharing: {
|
|
3567
|
+
parameters: {
|
|
3568
|
+
query?: never;
|
|
3569
|
+
header?: never;
|
|
3570
|
+
path?: never;
|
|
3571
|
+
cookie?: never;
|
|
3572
|
+
};
|
|
3573
|
+
requestBody?: never;
|
|
3574
|
+
responses: {
|
|
3575
|
+
/** @description The current sharing relationships. */
|
|
3576
|
+
200: {
|
|
3577
|
+
headers: {
|
|
3578
|
+
[name: string]: unknown;
|
|
3579
|
+
};
|
|
3580
|
+
content: {
|
|
3581
|
+
"application/json": components["schemas"]["SharingResponse"];
|
|
3582
|
+
};
|
|
3583
|
+
};
|
|
3584
|
+
/** @description No valid session cookie was presented. */
|
|
3585
|
+
401: {
|
|
3586
|
+
headers: {
|
|
3587
|
+
[name: string]: unknown;
|
|
3588
|
+
};
|
|
3589
|
+
content: {
|
|
3590
|
+
"application/json": components["schemas"]["Error"];
|
|
3591
|
+
};
|
|
3592
|
+
};
|
|
3593
|
+
};
|
|
3594
|
+
};
|
|
3595
|
+
shareWith: {
|
|
3596
|
+
parameters: {
|
|
3597
|
+
query?: never;
|
|
3598
|
+
header?: never;
|
|
3599
|
+
path: {
|
|
3600
|
+
username: components["parameters"]["PathUsername"];
|
|
3601
|
+
};
|
|
3602
|
+
cookie?: never;
|
|
3603
|
+
};
|
|
3604
|
+
requestBody?: never;
|
|
3605
|
+
responses: {
|
|
3606
|
+
/** @description Shared. */
|
|
3607
|
+
204: {
|
|
3608
|
+
headers: {
|
|
3609
|
+
[name: string]: unknown;
|
|
3610
|
+
};
|
|
3611
|
+
content?: never;
|
|
3612
|
+
};
|
|
3613
|
+
/** @description Can't share your own dashboard with yourself. */
|
|
3614
|
+
400: {
|
|
3615
|
+
headers: {
|
|
3616
|
+
[name: string]: unknown;
|
|
3617
|
+
};
|
|
3618
|
+
content: {
|
|
3619
|
+
"application/json": components["schemas"]["Error"];
|
|
3620
|
+
};
|
|
3621
|
+
};
|
|
3622
|
+
/** @description No valid session cookie was presented. */
|
|
3623
|
+
401: {
|
|
3624
|
+
headers: {
|
|
3625
|
+
[name: string]: unknown;
|
|
3626
|
+
};
|
|
3627
|
+
content: {
|
|
3628
|
+
"application/json": components["schemas"]["Error"];
|
|
3629
|
+
};
|
|
3630
|
+
};
|
|
3631
|
+
/** @description No user is registered under that username. */
|
|
3632
|
+
404: {
|
|
3633
|
+
headers: {
|
|
3634
|
+
[name: string]: unknown;
|
|
3635
|
+
};
|
|
3636
|
+
content: {
|
|
3637
|
+
"application/json": components["schemas"]["Error"];
|
|
3638
|
+
};
|
|
3639
|
+
};
|
|
3640
|
+
};
|
|
3641
|
+
};
|
|
3642
|
+
unshareWith: {
|
|
3643
|
+
parameters: {
|
|
3644
|
+
query?: never;
|
|
3645
|
+
header?: never;
|
|
3646
|
+
path: {
|
|
3647
|
+
username: components["parameters"]["PathUsername"];
|
|
3648
|
+
};
|
|
3649
|
+
cookie?: never;
|
|
3650
|
+
};
|
|
3651
|
+
requestBody?: never;
|
|
3652
|
+
responses: {
|
|
3653
|
+
/** @description No longer shared. */
|
|
3654
|
+
204: {
|
|
3655
|
+
headers: {
|
|
3656
|
+
[name: string]: unknown;
|
|
3657
|
+
};
|
|
3658
|
+
content?: never;
|
|
3659
|
+
};
|
|
3660
|
+
/** @description No valid session cookie was presented. */
|
|
3661
|
+
401: {
|
|
3662
|
+
headers: {
|
|
3663
|
+
[name: string]: unknown;
|
|
3664
|
+
};
|
|
3665
|
+
content: {
|
|
3666
|
+
"application/json": components["schemas"]["Error"];
|
|
3667
|
+
};
|
|
3668
|
+
};
|
|
3669
|
+
};
|
|
3670
|
+
};
|
|
3671
|
+
receiveGitHubWebhook: {
|
|
3672
|
+
parameters: {
|
|
3673
|
+
query?: never;
|
|
3674
|
+
header?: never;
|
|
3675
|
+
path: {
|
|
3676
|
+
webhookToken: components["parameters"]["PathWebhookToken"];
|
|
3677
|
+
};
|
|
3678
|
+
cookie?: never;
|
|
3679
|
+
};
|
|
3680
|
+
requestBody: {
|
|
3681
|
+
content: {
|
|
3682
|
+
"application/json": Record<string, never>;
|
|
3683
|
+
};
|
|
3684
|
+
};
|
|
3685
|
+
responses: {
|
|
3686
|
+
/** @description Signature verified; a refresh was triggered. */
|
|
3687
|
+
204: {
|
|
3688
|
+
headers: {
|
|
3689
|
+
[name: string]: unknown;
|
|
3690
|
+
};
|
|
3691
|
+
content?: never;
|
|
3692
|
+
};
|
|
3693
|
+
/** @description The X-Hub-Signature-256 header was missing or didn't verify against this user's webhook secret. */
|
|
3694
|
+
401: {
|
|
3695
|
+
headers: {
|
|
3696
|
+
[name: string]: unknown;
|
|
3697
|
+
};
|
|
3698
|
+
content: {
|
|
3699
|
+
"application/json": components["schemas"]["Error"];
|
|
3700
|
+
};
|
|
3701
|
+
};
|
|
3702
|
+
/** @description No user's webhook token matches webhookToken. */
|
|
3703
|
+
404: {
|
|
3704
|
+
headers: {
|
|
3705
|
+
[name: string]: unknown;
|
|
3706
|
+
};
|
|
3707
|
+
content: {
|
|
3708
|
+
"application/json": components["schemas"]["Error"];
|
|
3709
|
+
};
|
|
3710
|
+
};
|
|
3711
|
+
};
|
|
3712
|
+
};
|
|
3713
|
+
receiveForgejoWebhook: {
|
|
3714
|
+
parameters: {
|
|
3715
|
+
query?: never;
|
|
3716
|
+
header?: never;
|
|
3717
|
+
path: {
|
|
3718
|
+
webhookToken: components["parameters"]["PathWebhookToken"];
|
|
3719
|
+
};
|
|
3720
|
+
cookie?: never;
|
|
3721
|
+
};
|
|
3722
|
+
requestBody: {
|
|
3723
|
+
content: {
|
|
3724
|
+
"application/json": Record<string, never>;
|
|
3725
|
+
};
|
|
3726
|
+
};
|
|
3727
|
+
responses: {
|
|
3728
|
+
/** @description Signature verified; a refresh was triggered. */
|
|
3729
|
+
204: {
|
|
3730
|
+
headers: {
|
|
3731
|
+
[name: string]: unknown;
|
|
3732
|
+
};
|
|
3733
|
+
content?: never;
|
|
3734
|
+
};
|
|
3735
|
+
/** @description Both signature headers were missing, or neither verified against this user's webhook secret. */
|
|
3736
|
+
401: {
|
|
3737
|
+
headers: {
|
|
3738
|
+
[name: string]: unknown;
|
|
3739
|
+
};
|
|
3740
|
+
content: {
|
|
3741
|
+
"application/json": components["schemas"]["Error"];
|
|
3742
|
+
};
|
|
3743
|
+
};
|
|
3744
|
+
/** @description No user's webhook token matches webhookToken. */
|
|
3745
|
+
404: {
|
|
3746
|
+
headers: {
|
|
3747
|
+
[name: string]: unknown;
|
|
3748
|
+
};
|
|
3749
|
+
content: {
|
|
3750
|
+
"application/json": components["schemas"]["Error"];
|
|
3751
|
+
};
|
|
3752
|
+
};
|
|
3753
|
+
};
|
|
3754
|
+
};
|
|
3755
|
+
}
|
|
3756
|
+
//# sourceMappingURL=schema.d.ts.map
|