@artifact-keeper/sdk 1.5.8 → 1.7.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/package.json +1 -1
- package/src/index.ts +2 -2
- package/src/sdk.gen.ts +221 -6
- package/src/types.gen.ts +1811 -101
package/src/types.gen.ts
CHANGED
|
@@ -4,6 +4,50 @@ export type ClientOptions = {
|
|
|
4
4
|
baseUrl: `${string}://${string}` | (string & {});
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* One principal that can read an affected artifact but has not downloaded it.
|
|
9
|
+
*/
|
|
10
|
+
export type AccessibleUser = {
|
|
11
|
+
/**
|
|
12
|
+
* Always `has-access` for this endpoint (accessible minus downloaded).
|
|
13
|
+
*/
|
|
14
|
+
reason: string;
|
|
15
|
+
user_id: string;
|
|
16
|
+
username: string;
|
|
17
|
+
/**
|
|
18
|
+
* How access is granted: `admin` (global), `permission` (fine-grained
|
|
19
|
+
* direct **or** group grant, repo or owning project), or `role`
|
|
20
|
+
* (role_assignment only). Direct and group grants both surface as
|
|
21
|
+
* `permission` because they share one read fragment.
|
|
22
|
+
*/
|
|
23
|
+
via: string;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Full accessible-but-not-downloaded report for a CVE or artifact, scoped to
|
|
28
|
+
* one restricted repository.
|
|
29
|
+
*/
|
|
30
|
+
export type AccessibleUsersResponse = {
|
|
31
|
+
/**
|
|
32
|
+
* The page of accessible-but-not-downloaded principals. Empty when
|
|
33
|
+
* `exposure != "enumerable"`.
|
|
34
|
+
*/
|
|
35
|
+
accessible_not_downloaded: Array<AccessibleUser>;
|
|
36
|
+
/**
|
|
37
|
+
* `enumerable` | `everyone` | `effectively-everyone`.
|
|
38
|
+
*/
|
|
39
|
+
exposure: string;
|
|
40
|
+
page: number;
|
|
41
|
+
per_page: number;
|
|
42
|
+
repository: RepoExposure;
|
|
43
|
+
target: BlastRadiusTargetInfo;
|
|
44
|
+
/**
|
|
45
|
+
* Total accessible-not-downloaded principals (the pagination total).
|
|
46
|
+
* `null` for `public` repos (never enumerated).
|
|
47
|
+
*/
|
|
48
|
+
total?: number | null;
|
|
49
|
+
};
|
|
50
|
+
|
|
7
51
|
export type AcknowledgeRequest = {
|
|
8
52
|
reason: string;
|
|
9
53
|
};
|
|
@@ -28,6 +72,19 @@ export type AddPeerLabelRequest = {
|
|
|
28
72
|
value?: string;
|
|
29
73
|
};
|
|
30
74
|
|
|
75
|
+
export type AddProjectMemberRequest = {
|
|
76
|
+
/**
|
|
77
|
+
* Actions granted on every repository in the project (e.g. ["read"],
|
|
78
|
+
* ["read", "write"]).
|
|
79
|
+
*/
|
|
80
|
+
actions: Array<string>;
|
|
81
|
+
principal_id: string;
|
|
82
|
+
/**
|
|
83
|
+
* "user" or "group".
|
|
84
|
+
*/
|
|
85
|
+
principal_type: string;
|
|
86
|
+
};
|
|
87
|
+
|
|
31
88
|
export type AddVirtualMemberRequest = {
|
|
32
89
|
member_key: string;
|
|
33
90
|
priority?: number | null;
|
|
@@ -246,7 +303,19 @@ export type ArtifactListResponse = {
|
|
|
246
303
|
* Docker tag grouping. Only present when `group_by=docker_tag`.
|
|
247
304
|
*/
|
|
248
305
|
docker_tags?: Array<DockerTagResponse> | null;
|
|
306
|
+
/**
|
|
307
|
+
* Whether another page exists after this one (#2520, #2518). Present on
|
|
308
|
+
* keyset-paged listings (flat and grouped); authoritative regardless of
|
|
309
|
+
* the `pagination.total` mode (exact vs lower bound).
|
|
310
|
+
*/
|
|
311
|
+
has_more?: boolean | null;
|
|
249
312
|
items: Array<ArtifactResponse>;
|
|
313
|
+
/**
|
|
314
|
+
* Opaque keyset cursor for the next page (#2520, #2518). Present on
|
|
315
|
+
* keyset-paged listings (flat and grouped) when another page exists;
|
|
316
|
+
* pass it back via `?cursor=`.
|
|
317
|
+
*/
|
|
318
|
+
next_cursor?: string | null;
|
|
250
319
|
pagination: Pagination;
|
|
251
320
|
};
|
|
252
321
|
|
|
@@ -296,6 +365,31 @@ export type ArtifactResponse = {
|
|
|
296
365
|
} | null;
|
|
297
366
|
name: string;
|
|
298
367
|
path: string;
|
|
368
|
+
/**
|
|
369
|
+
* Per-artifact quarantine state so a client/operator can tell which
|
|
370
|
+
* listed artifacts are held for security review (#2940). Always
|
|
371
|
+
* serialized so the listing never hides the control:
|
|
372
|
+
* - `"quarantined"` — held pending review; downloads return 409 (until
|
|
373
|
+
* any `quarantine_until` lapses),
|
|
374
|
+
* - `"rejected"` — terminally blocked by an admin,
|
|
375
|
+
* - a scan-lifecycle state (`"clean"`, `"flagged"`, `"unscanned"`,
|
|
376
|
+
* `"released"`),
|
|
377
|
+
* - `"not_quarantined"` — the explicit default when the row carries no
|
|
378
|
+
* quarantine state, so clients never have to treat a missing value as
|
|
379
|
+
* a state.
|
|
380
|
+
*
|
|
381
|
+
* The human-readable *reason* is intentionally NOT surfaced here: it is
|
|
382
|
+
* per-artifact security detail disclosed only by the authenticated,
|
|
383
|
+
* repository-visibility-checked `GET /api/v1/quarantine/{id}` (#2912),
|
|
384
|
+
* whereas this listing is reachable anonymously on public repositories.
|
|
385
|
+
*/
|
|
386
|
+
quarantine_status: string;
|
|
387
|
+
/**
|
|
388
|
+
* When a timed quarantine hold lapses and the artifact becomes
|
|
389
|
+
* downloadable again. `None` for a permanent (admin) quarantine and for
|
|
390
|
+
* artifacts that are not quarantined. (#2940)
|
|
391
|
+
*/
|
|
392
|
+
quarantine_until?: string | null;
|
|
299
393
|
repository_key: string;
|
|
300
394
|
/**
|
|
301
395
|
* Server-assigned revision number for repositories with first-class
|
|
@@ -439,6 +533,18 @@ export type AuthConfig = {
|
|
|
439
533
|
* Whether an LDAP directory is configured.
|
|
440
534
|
*/
|
|
441
535
|
ldap_enabled: boolean;
|
|
536
|
+
/**
|
|
537
|
+
* Whether the login UI should offer the local username/password form
|
|
538
|
+
* (issue #2621). `true` when no SSO provider is enabled; with SSO
|
|
539
|
+
* enabled it is `true` only when the operator explicitly opted in via
|
|
540
|
+
* `ALLOW_LOCAL_ADMIN_LOGIN=true` and has not enforced strict SSO-only
|
|
541
|
+
* via `SSO_DISABLE_ADMIN_BREAK_GLASS`. Display-only: the login endpoint
|
|
542
|
+
* independently enforces the same policy server-side
|
|
543
|
+
* (`api::handlers::auth::local_login_gate`), so this flag never grants
|
|
544
|
+
* access by itself. LDAP is separate — the UI shows the credentials form
|
|
545
|
+
* for enabled LDAP providers regardless of this flag.
|
|
546
|
+
*/
|
|
547
|
+
local_login_enabled: boolean;
|
|
442
548
|
/**
|
|
443
549
|
* Whether an OIDC provider is configured.
|
|
444
550
|
*/
|
|
@@ -966,7 +1072,40 @@ export type CreateApiTokenResponse = {
|
|
|
966
1072
|
};
|
|
967
1073
|
|
|
968
1074
|
export type CreateBackupRequest = {
|
|
1075
|
+
/**
|
|
1076
|
+
* Repository ids to exclude from a full or incremental backup (#2772).
|
|
1077
|
+
*
|
|
1078
|
+
* Airgapped or bandwidth-limited deployments use this to keep specific
|
|
1079
|
+
* repositories out of the backup. When omitted or empty nothing is
|
|
1080
|
+
* excluded, so existing behavior is unchanged. If `repository_ids` is
|
|
1081
|
+
* also supplied the excluded ids are removed from that include list;
|
|
1082
|
+
* otherwise every repository except the excluded ones is backed up.
|
|
1083
|
+
*/
|
|
1084
|
+
exclude_repositories?: Array<string> | null;
|
|
1085
|
+
/**
|
|
1086
|
+
* Optional custom name/label for the backup archive (#2790).
|
|
1087
|
+
*
|
|
1088
|
+
* When provided it becomes the identifying part of the archive
|
|
1089
|
+
* filename. Restricted to letters, digits, `.`, `_`, and `-`; when
|
|
1090
|
+
* omitted the archive keeps its default `{uuid}` name.
|
|
1091
|
+
*/
|
|
1092
|
+
name?: string | null;
|
|
1093
|
+
/**
|
|
1094
|
+
* Explicit allow-list of repository ids to include in the backup.
|
|
1095
|
+
*
|
|
1096
|
+
* When omitted every repository is backed up (subject to
|
|
1097
|
+
* `exclude_repositories`).
|
|
1098
|
+
*/
|
|
969
1099
|
repository_ids?: Array<string> | null;
|
|
1100
|
+
/**
|
|
1101
|
+
* Optional RFC3339 lower bound on artifact modification time (#2789).
|
|
1102
|
+
*
|
|
1103
|
+
* When set, the (typically incremental) backup includes only artifacts
|
|
1104
|
+
* whose `updated_at` is at or after this timestamp, capturing just the
|
|
1105
|
+
* changes made from the given date/time to now. When omitted every
|
|
1106
|
+
* artifact is included, so backup behavior is unchanged.
|
|
1107
|
+
*/
|
|
1108
|
+
since?: string | null;
|
|
970
1109
|
type?: string | null;
|
|
971
1110
|
};
|
|
972
1111
|
|
|
@@ -1065,11 +1204,24 @@ export type CreateLdapConfigRequest = {
|
|
|
1065
1204
|
admin_group_dn?: string | null;
|
|
1066
1205
|
bind_dn?: string | null;
|
|
1067
1206
|
bind_password?: string | null;
|
|
1207
|
+
/**
|
|
1208
|
+
* Inline PEM CA certificate/chain to trust for this provider's LDAPS/
|
|
1209
|
+
* STARTTLS handshake (migration 174, #2782). Send an empty string to
|
|
1210
|
+
* clear a previously stored certificate.
|
|
1211
|
+
*/
|
|
1212
|
+
ca_certificate?: string | null;
|
|
1068
1213
|
display_name_attribute?: string | null;
|
|
1069
1214
|
email_attribute?: string | null;
|
|
1070
1215
|
group_base_dn?: string | null;
|
|
1071
1216
|
group_filter?: string | null;
|
|
1072
1217
|
groups_attribute?: string | null;
|
|
1218
|
+
/**
|
|
1219
|
+
* Opt-in (migration 174, #2782): skip TLS certificate verification for
|
|
1220
|
+
* this provider's LDAPS/STARTTLS handshake. Defaults false
|
|
1221
|
+
* (secure-by-default). Only enable for trusted networks / private CAs
|
|
1222
|
+
* you cannot import.
|
|
1223
|
+
*/
|
|
1224
|
+
insecure_skip_verify?: boolean | null;
|
|
1073
1225
|
is_enabled?: boolean | null;
|
|
1074
1226
|
name: string;
|
|
1075
1227
|
priority?: number | null;
|
|
@@ -1153,6 +1305,16 @@ export type CreatePolicyRequest = {
|
|
|
1153
1305
|
require_signature?: boolean;
|
|
1154
1306
|
};
|
|
1155
1307
|
|
|
1308
|
+
export type CreateProjectRequest = {
|
|
1309
|
+
description?: string | null;
|
|
1310
|
+
key: string;
|
|
1311
|
+
name: string;
|
|
1312
|
+
/**
|
|
1313
|
+
* P1: stored only, NOT enforced (quota enforcement is P3).
|
|
1314
|
+
*/
|
|
1315
|
+
quota_bytes?: number | null;
|
|
1316
|
+
};
|
|
1317
|
+
|
|
1156
1318
|
/**
|
|
1157
1319
|
* Request to create an access token scoped to a repository.
|
|
1158
1320
|
*/
|
|
@@ -1198,6 +1360,40 @@ export type CreateRepositoryRequest = {
|
|
|
1198
1360
|
* `allow_anonymous_access` takes precedence.
|
|
1199
1361
|
*/
|
|
1200
1362
|
allow_anonymous_access?: boolean | null;
|
|
1363
|
+
/**
|
|
1364
|
+
* Custom Description field for Debian/APT Release files.
|
|
1365
|
+
* Stored in `repository_config` under `apt_description`.
|
|
1366
|
+
*/
|
|
1367
|
+
apt_description?: string | null;
|
|
1368
|
+
/**
|
|
1369
|
+
* Custom Label field for Debian/APT Release files.
|
|
1370
|
+
* Stored in `repository_config` under `apt_label`.
|
|
1371
|
+
*/
|
|
1372
|
+
apt_label?: string | null;
|
|
1373
|
+
/**
|
|
1374
|
+
* Custom Origin field for Debian/APT Release files.
|
|
1375
|
+
* Stored in `repository_config` under `apt_origin`.
|
|
1376
|
+
*/
|
|
1377
|
+
apt_origin?: string | null;
|
|
1378
|
+
/**
|
|
1379
|
+
* Custom Version field for Debian/APT Release files.
|
|
1380
|
+
* Stored in `repository_config` under `apt_release_version`.
|
|
1381
|
+
*/
|
|
1382
|
+
apt_release_version?: string | null;
|
|
1383
|
+
/**
|
|
1384
|
+
* Opt into ingesting UNVERIFIED upstream metadata on the keyless RPM
|
|
1385
|
+
* curation-sync path (#2569). Omit or `false` to keep the fail-closed
|
|
1386
|
+
* default (a keyless curation sync refuses to ingest unverified upstream
|
|
1387
|
+
* packages); `true` reverts to the legacy unverified-ingest behavior. Only
|
|
1388
|
+
* meaningful for RPM curation staging repositories.
|
|
1389
|
+
*/
|
|
1390
|
+
curation_allow_unverified?: boolean | null;
|
|
1391
|
+
/**
|
|
1392
|
+
* Custom User-Agent sent on outbound HTTP requests to the upstream for
|
|
1393
|
+
* this repository. Only valid for remote repositories. Max 256 characters.
|
|
1394
|
+
*/
|
|
1395
|
+
custom_user_agent?: string | null;
|
|
1396
|
+
debian?: null | DebianRepositoryConfig;
|
|
1201
1397
|
description?: string | null;
|
|
1202
1398
|
format: string;
|
|
1203
1399
|
/**
|
|
@@ -1219,6 +1415,31 @@ export type CreateRepositoryRequest = {
|
|
|
1219
1415
|
*/
|
|
1220
1416
|
member_repos?: Array<CreateVirtualMemberInput> | null;
|
|
1221
1417
|
name: string;
|
|
1418
|
+
/**
|
|
1419
|
+
* Whether unscoped npm package names may resolve through this npm Remote
|
|
1420
|
+
* repository (#2424). Stored under `npm_allow_unscoped`.
|
|
1421
|
+
*/
|
|
1422
|
+
npm_allow_unscoped?: boolean | null;
|
|
1423
|
+
/**
|
|
1424
|
+
* Allowed npm full-name glob patterns (`*`/`?`) for this npm Remote
|
|
1425
|
+
* repository (#2424). Additive to `npm_allowed_scopes`; stored under
|
|
1426
|
+
* `npm_allowed_name_patterns`. A name is allowed if its scope is allowed
|
|
1427
|
+
* OR any glob matches (e.g. `@acme*`, `internal-*`).
|
|
1428
|
+
*/
|
|
1429
|
+
npm_allowed_name_patterns?: Array<string> | null;
|
|
1430
|
+
/**
|
|
1431
|
+
* Allowed npm `@scope` literals for this npm Remote repository (#2424).
|
|
1432
|
+
* Only meaningful for npm-format Remote repositories; validated and stored
|
|
1433
|
+
* in `repository_config` under `npm_allowed_scopes`. Omit to leave the
|
|
1434
|
+
* repository unrestricted by scope.
|
|
1435
|
+
*/
|
|
1436
|
+
npm_allowed_scopes?: Array<string> | null;
|
|
1437
|
+
/**
|
|
1438
|
+
* Optional project to assign this repository to (#2472). Grants on the
|
|
1439
|
+
* project (permissions with `target_type = 'project'`) are inherited by
|
|
1440
|
+
* the repository. Omit to leave the repository unassigned.
|
|
1441
|
+
*/
|
|
1442
|
+
project_id?: string | null;
|
|
1222
1443
|
/**
|
|
1223
1444
|
* When true, direct user uploads to this repository are rejected:
|
|
1224
1445
|
* artifacts must arrive via the promotion path. Admin-only to set.
|
|
@@ -1246,6 +1467,16 @@ export type CreateRepositoryRequest = {
|
|
|
1246
1467
|
* Non-admin users may only use the default backend.
|
|
1247
1468
|
*/
|
|
1248
1469
|
storage_backend?: string | null;
|
|
1470
|
+
/**
|
|
1471
|
+
* ASCII-armored OpenPGP *public* key trusted to sign this RPM curation
|
|
1472
|
+
* remote's `repodata/repomd.xml` (#2568, RPM curation Phase 3). When set,
|
|
1473
|
+
* the curation sync fetches `repomd.xml.asc` and verifies the detached
|
|
1474
|
+
* signature before ingesting upstream metadata (#2567 reads this column).
|
|
1475
|
+
* Must be a PUBLIC key block; a private-key block is rejected. Write-only:
|
|
1476
|
+
* the response exposes only the boolean `has_trusted_gpg_key`, never the
|
|
1477
|
+
* key material.
|
|
1478
|
+
*/
|
|
1479
|
+
trusted_gpg_key?: string | null;
|
|
1249
1480
|
/**
|
|
1250
1481
|
* Upstream auth type: "basic" or "bearer". Only valid for remote repos.
|
|
1251
1482
|
*/
|
|
@@ -1289,6 +1520,12 @@ export type CreateSamlConfigRequest = {
|
|
|
1289
1520
|
certificate: string;
|
|
1290
1521
|
entity_id: string;
|
|
1291
1522
|
is_enabled?: boolean | null;
|
|
1523
|
+
/**
|
|
1524
|
+
* Opt-in flag (see migration 157, #2333): when true, SAML assertion
|
|
1525
|
+
* group values are reflected as Artifact Keeper group memberships.
|
|
1526
|
+
* Defaults to false.
|
|
1527
|
+
*/
|
|
1528
|
+
map_groups_to_groups?: boolean | null;
|
|
1292
1529
|
name: string;
|
|
1293
1530
|
name_id_format?: string | null;
|
|
1294
1531
|
require_signed_assertions?: boolean | null;
|
|
@@ -1492,6 +1729,7 @@ export type CreateWebhookRequest = {
|
|
|
1492
1729
|
export type CreatedGroupRow = {
|
|
1493
1730
|
created_at: string;
|
|
1494
1731
|
description?: string | null;
|
|
1732
|
+
external_source?: string | null;
|
|
1495
1733
|
id: string;
|
|
1496
1734
|
name: string;
|
|
1497
1735
|
updated_at: string;
|
|
@@ -1511,9 +1749,33 @@ export type CreatedPermissionRow = {
|
|
|
1511
1749
|
export type CurationCreateRuleRequest = {
|
|
1512
1750
|
action: string;
|
|
1513
1751
|
architecture?: string;
|
|
1514
|
-
|
|
1752
|
+
/**
|
|
1753
|
+
* Engine-specific parameters (JSON object). `{}` for `pattern` rules.
|
|
1754
|
+
*/
|
|
1755
|
+
config?: {
|
|
1756
|
+
[key: string]: unknown;
|
|
1757
|
+
};
|
|
1758
|
+
/**
|
|
1759
|
+
* Only meaningful for `rule_type = "pattern"`; defaults to `*` so typed
|
|
1760
|
+
* rules (`publisher_trust`, `popularity`) can omit it.
|
|
1761
|
+
*/
|
|
1762
|
+
package_pattern?: string;
|
|
1515
1763
|
priority?: number;
|
|
1516
1764
|
reason: string;
|
|
1765
|
+
/**
|
|
1766
|
+
* Evaluation engine: `pattern` (default), `publisher_trust`, `popularity`.
|
|
1767
|
+
*/
|
|
1768
|
+
rule_type?: string;
|
|
1769
|
+
/**
|
|
1770
|
+
* `repository` (default when `staging_repo_id` is set) or `global`.
|
|
1771
|
+
* When present it must be consistent with `staging_repo_id`: `global`
|
|
1772
|
+
* forbids a repo id, `repository` requires one.
|
|
1773
|
+
*/
|
|
1774
|
+
scope?: string | null;
|
|
1775
|
+
/**
|
|
1776
|
+
* Omit (with `scope: "global"` or no `scope`) to create an instance-wide
|
|
1777
|
+
* baseline rule; set to attach the rule to one staging repository.
|
|
1778
|
+
*/
|
|
1517
1779
|
staging_repo_id?: string | null;
|
|
1518
1780
|
version_constraint?: string;
|
|
1519
1781
|
};
|
|
@@ -1543,10 +1805,20 @@ export type CurationPackageResponse = {
|
|
|
1543
1805
|
export type CurationUpdateRuleRequest = {
|
|
1544
1806
|
action: string;
|
|
1545
1807
|
architecture?: string;
|
|
1808
|
+
/**
|
|
1809
|
+
* Engine-specific parameters (JSON object). `{}` for `pattern` rules.
|
|
1810
|
+
*/
|
|
1811
|
+
config?: {
|
|
1812
|
+
[key: string]: unknown;
|
|
1813
|
+
};
|
|
1546
1814
|
enabled?: boolean;
|
|
1547
1815
|
package_pattern: string;
|
|
1548
1816
|
priority?: number;
|
|
1549
1817
|
reason: string;
|
|
1818
|
+
/**
|
|
1819
|
+
* Evaluation engine: `pattern` (default), `publisher_trust`, `popularity`.
|
|
1820
|
+
*/
|
|
1821
|
+
rule_type?: string;
|
|
1550
1822
|
version_constraint?: string;
|
|
1551
1823
|
};
|
|
1552
1824
|
|
|
@@ -1666,6 +1938,112 @@ export type DbPoolStats = {
|
|
|
1666
1938
|
size: number;
|
|
1667
1939
|
};
|
|
1668
1940
|
|
|
1941
|
+
/**
|
|
1942
|
+
* Partial-update patch for [`DebianRepositoryConfig`]. Fields left absent are
|
|
1943
|
+
* preserved; provided fields (including an explicit empty list) replace the
|
|
1944
|
+
* stored value. Applied on top of the currently stored config, or on top of
|
|
1945
|
+
* the default when none exists yet.
|
|
1946
|
+
*/
|
|
1947
|
+
export type DebianConfigPatch = {
|
|
1948
|
+
allow_encoded_separators?: boolean | null;
|
|
1949
|
+
architectures?: Array<string> | null;
|
|
1950
|
+
components?: Array<string> | null;
|
|
1951
|
+
distribution_paths?: Array<string> | null;
|
|
1952
|
+
flat_repository?: boolean | null;
|
|
1953
|
+
include_source_packages?: boolean | null;
|
|
1954
|
+
metadata_strategy?: null | DebianMetadataStrategy;
|
|
1955
|
+
package_fetch_strategy?: null | DebianPackageFetchStrategy;
|
|
1956
|
+
package_queries?: Array<string> | null;
|
|
1957
|
+
upstream_gpg_key_id?: string | null;
|
|
1958
|
+
verify_upstream_metadata?: boolean | null;
|
|
1959
|
+
};
|
|
1960
|
+
|
|
1961
|
+
/**
|
|
1962
|
+
* How metadata (`Packages`/`Release`) is produced for a Debian remote.
|
|
1963
|
+
*
|
|
1964
|
+
* Only [`DebianMetadataStrategy::UpstreamPassthrough`] is implemented in
|
|
1965
|
+
* 1.6.0; the other variants are reserved for P3 (filtered generation) / P4
|
|
1966
|
+
* (local re-signing) and are rejected with 422 until then. The enum lands now
|
|
1967
|
+
* so those phases can flip it on without a schema/config-shape change.
|
|
1968
|
+
*/
|
|
1969
|
+
export type DebianMetadataStrategy = 'upstream_passthrough' | 'filter_and_generate' | 'filter_generate_and_sign' | 'hosted_generate';
|
|
1970
|
+
|
|
1971
|
+
/**
|
|
1972
|
+
* How package bodies are fetched for a Debian remote.
|
|
1973
|
+
*
|
|
1974
|
+
* Only [`DebianPackageFetchStrategy::UpstreamPassthrough`] is implemented in
|
|
1975
|
+
* 1.6.0.
|
|
1976
|
+
*/
|
|
1977
|
+
export type DebianPackageFetchStrategy = 'upstream_passthrough' | 'eager';
|
|
1978
|
+
|
|
1979
|
+
/**
|
|
1980
|
+
* P2 Debian remote proxy filter config (dist/component/arch allowlists).
|
|
1981
|
+
*
|
|
1982
|
+
* Semantics for each allowlist: an empty list OR a list containing `"*"`
|
|
1983
|
+
* selects everything (today's full-proxy behaviour); otherwise only exact
|
|
1984
|
+
* matches are selected. Architecture-independent (`all`) packages are always
|
|
1985
|
+
* permitted regardless of the `architectures` allowlist.
|
|
1986
|
+
*/
|
|
1987
|
+
export type DebianRepositoryConfig = {
|
|
1988
|
+
/**
|
|
1989
|
+
* Defense-in-depth (#2562): when `false` (the default) a proxy request
|
|
1990
|
+
* whose path carries a percent-encoded path separator (`%2f` = `/`,
|
|
1991
|
+
* `%5c` = `\`, at any decode layer) is rejected with 400 before any
|
|
1992
|
+
* upstream fetch. APT never percent-encodes path separators, so this only
|
|
1993
|
+
* ever blocks path-confusion/traversal probes; set it `true` to opt out
|
|
1994
|
+
* for a nonstandard upstream that genuinely requires encoded separators.
|
|
1995
|
+
*/
|
|
1996
|
+
allow_encoded_separators?: boolean;
|
|
1997
|
+
/**
|
|
1998
|
+
* Architectures (e.g. `amd64`, `arm64`) to proxy. Empty/`["*"]` = all.
|
|
1999
|
+
* `all` (arch-independent) is always permitted.
|
|
2000
|
+
*/
|
|
2001
|
+
architectures?: Array<string>;
|
|
2002
|
+
/**
|
|
2003
|
+
* Components (e.g. `main`, `contrib`, `non-free`) to proxy. Empty/`["*"]` = all.
|
|
2004
|
+
*/
|
|
2005
|
+
components?: Array<string>;
|
|
2006
|
+
/**
|
|
2007
|
+
* Distributions (a.k.a. suites/codenames, e.g. `bookworm`) to proxy.
|
|
2008
|
+
* Empty or `["*"]` = all.
|
|
2009
|
+
*/
|
|
2010
|
+
distribution_paths?: Array<string>;
|
|
2011
|
+
/**
|
|
2012
|
+
* Flat (non-`dists/`) repository layout flag. Accepted but does NOT weaken
|
|
2013
|
+
* P1's flat/redirect abuse posture in passthrough.
|
|
2014
|
+
*/
|
|
2015
|
+
flat_repository?: boolean;
|
|
2016
|
+
/**
|
|
2017
|
+
* Whether source packages (`Sources`, `.dsc`) are included. Advisory in
|
|
2018
|
+
* passthrough (upstream metadata is unchanged); honored under P3.
|
|
2019
|
+
*/
|
|
2020
|
+
include_source_packages?: boolean;
|
|
2021
|
+
/**
|
|
2022
|
+
* Metadata production strategy. Only `upstream_passthrough` in 1.6.0.
|
|
2023
|
+
*/
|
|
2024
|
+
metadata_strategy?: DebianMetadataStrategy;
|
|
2025
|
+
/**
|
|
2026
|
+
* Package-body fetch strategy. Only `upstream_passthrough` in 1.6.0.
|
|
2027
|
+
*/
|
|
2028
|
+
package_fetch_strategy?: DebianPackageFetchStrategy;
|
|
2029
|
+
/**
|
|
2030
|
+
* Package-name-level queries. NOT honored in passthrough (that needs P3);
|
|
2031
|
+
* a non-empty value here with `upstream_passthrough` is rejected with 422
|
|
2032
|
+
* rather than silently advertising content the proxy would then block.
|
|
2033
|
+
*/
|
|
2034
|
+
package_queries?: Array<string>;
|
|
2035
|
+
/**
|
|
2036
|
+
* Upstream GPG key id used to verify upstream metadata (reserved for P4).
|
|
2037
|
+
*/
|
|
2038
|
+
upstream_gpg_key_id?: string | null;
|
|
2039
|
+
/**
|
|
2040
|
+
* Whether to verify the upstream signed `Release` before serving. In P2 the
|
|
2041
|
+
* P1 integrity gate already enforces index/Release consistency; this flag
|
|
2042
|
+
* is reserved for P4 trust-anchor verification.
|
|
2043
|
+
*/
|
|
2044
|
+
verify_upstream_metadata?: boolean;
|
|
2045
|
+
};
|
|
2046
|
+
|
|
1669
2047
|
export type DeliveryListResponse = {
|
|
1670
2048
|
items: Array<DeliveryResponse>;
|
|
1671
2049
|
total: number;
|
|
@@ -1799,6 +2177,13 @@ export type DownloadRecord = {
|
|
|
1799
2177
|
export type DownloadTrend = {
|
|
1800
2178
|
date: string;
|
|
1801
2179
|
download_count: number;
|
|
2180
|
+
/**
|
|
2181
|
+
* Proxy-served (pull-through) downloads for the day, from the sibling
|
|
2182
|
+
* `proxy_download_statistics` table (#2537/#2704). Additive: hosted
|
|
2183
|
+
* serves stay in `download_count` unchanged; defaults to 0 when
|
|
2184
|
+
* deserializing older payloads.
|
|
2185
|
+
*/
|
|
2186
|
+
proxy_download_count?: number;
|
|
1802
2187
|
};
|
|
1803
2188
|
|
|
1804
2189
|
/**
|
|
@@ -2246,6 +2631,10 @@ export type GroupMemberResponse = {
|
|
|
2246
2631
|
export type GroupResponse = {
|
|
2247
2632
|
created_at: string;
|
|
2248
2633
|
description?: string | null;
|
|
2634
|
+
/**
|
|
2635
|
+
* See [`GroupRow::external_source`]; lets the frontend disable member editing for SSO groups.
|
|
2636
|
+
*/
|
|
2637
|
+
external_source?: string | null;
|
|
2249
2638
|
id: string;
|
|
2250
2639
|
member_count: number;
|
|
2251
2640
|
name: string;
|
|
@@ -2255,6 +2644,10 @@ export type GroupResponse = {
|
|
|
2255
2644
|
export type GroupRow = {
|
|
2256
2645
|
created_at: string;
|
|
2257
2646
|
description?: string | null;
|
|
2647
|
+
/**
|
|
2648
|
+
* SSO provider owning the group (`oidc`/`saml`/`ldap`); `None` for local groups. IdP owns membership (#2874).
|
|
2649
|
+
*/
|
|
2650
|
+
external_source?: string | null;
|
|
2258
2651
|
id: string;
|
|
2259
2652
|
member_count: number;
|
|
2260
2653
|
name: string;
|
|
@@ -2413,7 +2806,20 @@ export type LdapConfigResponse = {
|
|
|
2413
2806
|
group_filter?: string | null;
|
|
2414
2807
|
groups_attribute: string;
|
|
2415
2808
|
has_bind_password: boolean;
|
|
2809
|
+
/**
|
|
2810
|
+
* Whether a custom inline CA certificate is configured for this provider
|
|
2811
|
+
* (migration 174, #2782). The PEM itself is not returned.
|
|
2812
|
+
*/
|
|
2813
|
+
has_ca_certificate: boolean;
|
|
2416
2814
|
id: string;
|
|
2815
|
+
/**
|
|
2816
|
+
* Opt-in flag (migration 174, #2782): when true, TLS certificate
|
|
2817
|
+
* verification is skipped for this provider's LDAPS/STARTTLS handshake.
|
|
2818
|
+
* Defaults false (secure-by-default). Matches Harbor's "insecure skip
|
|
2819
|
+
* verify"; only enable for trusted networks / private CAs you cannot
|
|
2820
|
+
* import.
|
|
2821
|
+
*/
|
|
2822
|
+
insecure_skip_verify: boolean;
|
|
2417
2823
|
is_enabled: boolean;
|
|
2418
2824
|
name: string;
|
|
2419
2825
|
priority: number;
|
|
@@ -2481,6 +2887,23 @@ export type LifecyclePolicy = {
|
|
|
2481
2887
|
};
|
|
2482
2888
|
|
|
2483
2889
|
export type ListArtifactsQuery = {
|
|
2890
|
+
/**
|
|
2891
|
+
* Total-count mode for keyset-paged listings (#2520, #2519).
|
|
2892
|
+
* `count=exact` runs a dedicated COUNT query so `pagination.total` is
|
|
2893
|
+
* exact; otherwise the keyset-paged listings report a cheap lower bound
|
|
2894
|
+
* (rows seen so far, +1 when another page exists) and `has_more` is the
|
|
2895
|
+
* authoritative "is there a next page" signal.
|
|
2896
|
+
*/
|
|
2897
|
+
count?: string | null;
|
|
2898
|
+
/**
|
|
2899
|
+
* Opaque keyset cursor (#2520, #2519, #2518). Pass the `next_cursor`
|
|
2900
|
+
* value from the previous response to fetch the next page; `page` is
|
|
2901
|
+
* ignored while a cursor is present. Supported by the flat artifact
|
|
2902
|
+
* listing of hosted/local, virtual, and remote repositories (#2518,
|
|
2903
|
+
* #2519), by `group_by=docker_tag`, and by `group_by=maven_component`
|
|
2904
|
+
* on remote repositories; other listing modes ignore it.
|
|
2905
|
+
*/
|
|
2906
|
+
cursor?: string | null;
|
|
2484
2907
|
/**
|
|
2485
2908
|
* Server-side artifact grouping.
|
|
2486
2909
|
*
|
|
@@ -2562,6 +2985,10 @@ export type ListRepositoriesQuery = {
|
|
|
2562
2985
|
format?: string | null;
|
|
2563
2986
|
page?: number | null;
|
|
2564
2987
|
per_page?: number | null;
|
|
2988
|
+
/**
|
|
2989
|
+
* Filter the listing to repositories assigned to this project (#2472).
|
|
2990
|
+
*/
|
|
2991
|
+
project?: string | null;
|
|
2565
2992
|
q?: string | null;
|
|
2566
2993
|
type?: string | null;
|
|
2567
2994
|
};
|
|
@@ -2825,26 +3252,33 @@ export type NpmScopePolicyResponse = {
|
|
|
2825
3252
|
* layers before any garbage-collection mechanism is enabled.
|
|
2826
3253
|
*
|
|
2827
3254
|
* It deliberately does NOT attempt to classify which blobs are
|
|
2828
|
-
* "reclaimable orphans": that
|
|
2829
|
-
*
|
|
2830
|
-
* digest)` orphan heuristic would mis-handle
|
|
2831
|
-
* (
|
|
2832
|
-
*
|
|
3255
|
+
* "reclaimable orphans": that is the blob GC's job (mark-and-sweep over
|
|
3256
|
+
* `manifest_blob_refs`, per [`BLOB_PROTECTED_BY_REFS_SQL`]). A naive
|
|
3257
|
+
* per-`(repository_id, digest)` orphan heuristic would mis-handle shared
|
|
3258
|
+
* backends (anything other than `filesystem`), where all referencing
|
|
3259
|
+
* repos share ONE physical object per digest per backend, and report
|
|
3260
|
+
* in-use blobs as reclaimable; on `filesystem` each repository keeps an
|
|
3261
|
+
* independent copy under its own `storage_path`. The numbers here are
|
|
3262
|
+
* exact aggregates only.
|
|
2833
3263
|
*/
|
|
2834
3264
|
export type OciBlobFootprintReport = {
|
|
2835
3265
|
/**
|
|
2836
|
-
* Distinct digests
|
|
2837
|
-
* by a future GC sweep once
|
|
3266
|
+
* Distinct digests with at least one physical copy older than
|
|
3267
|
+
* `grace_hours` (eligible to be *considered* by a future GC sweep once
|
|
3268
|
+
* a reference table exists). Reporting only.
|
|
2838
3269
|
*/
|
|
2839
3270
|
aged_distinct_digests: number;
|
|
2840
3271
|
/**
|
|
2841
|
-
* Physical bytes (
|
|
3272
|
+
* Physical bytes (same physical-object grouping as `physical_bytes`)
|
|
3273
|
+
* older than `grace_hours`.
|
|
2842
3274
|
*/
|
|
2843
3275
|
aged_physical_bytes: number;
|
|
2844
3276
|
/**
|
|
2845
3277
|
* Number of distinct blob digests (content-addressed identities). When
|
|
2846
3278
|
* this is smaller than `total_blob_rows`, the difference is cross-repo
|
|
2847
|
-
*
|
|
3279
|
+
* sharing of a content identity (one physical object shared by all
|
|
3280
|
+
* referencing repos on shared backends; an independent copy per
|
|
3281
|
+
* repository on `filesystem`).
|
|
2848
3282
|
*/
|
|
2849
3283
|
distinct_digests: number;
|
|
2850
3284
|
/**
|
|
@@ -2861,8 +3295,13 @@ export type OciBlobFootprintReport = {
|
|
|
2861
3295
|
*/
|
|
2862
3296
|
per_repository: Array<OciBlobRepoFootprint>;
|
|
2863
3297
|
/**
|
|
2864
|
-
* Sum of `size_bytes` counting each distinct
|
|
2865
|
-
*
|
|
3298
|
+
* Sum of `size_bytes` counting each distinct **physical storage
|
|
3299
|
+
* object** exactly once, per the ownership model of
|
|
3300
|
+
* [`BLOB_PROTECTED_BY_REFS_SQL`]: on shared backends (anything other
|
|
3301
|
+
* than `filesystem`) a digest is one object per backend; on
|
|
3302
|
+
* `filesystem` each repository stores its own copy under its
|
|
3303
|
+
* `storage_path`, so the same digest in two filesystem repositories
|
|
3304
|
+
* counts twice.
|
|
2866
3305
|
*/
|
|
2867
3306
|
physical_bytes: number;
|
|
2868
3307
|
/**
|
|
@@ -2880,10 +3319,13 @@ export type OciBlobRepoFootprint = {
|
|
|
2880
3319
|
*/
|
|
2881
3320
|
blob_rows: number;
|
|
2882
3321
|
/**
|
|
2883
|
-
* Sum of `oci_blobs.size_bytes` for this repository's rows.
|
|
2884
|
-
*
|
|
3322
|
+
* Sum of `oci_blobs.size_bytes` for this repository's rows. On shared
|
|
3323
|
+
* backends (anything other than `filesystem`) blobs are deduplicated
|
|
3324
|
+
* across repos — one physical object per digest per backend — so the
|
|
2885
3325
|
* same physical bytes can be counted under more than one repository
|
|
2886
|
-
* here
|
|
3326
|
+
* here. On `filesystem` each repository stores its own independent
|
|
3327
|
+
* copy under its `storage_path`, so its rows are that repo's real
|
|
3328
|
+
* bytes. See [`OciBlobFootprintReport::physical_bytes`] for the
|
|
2887
3329
|
* dedup-aware total.
|
|
2888
3330
|
*/
|
|
2889
3331
|
logical_bytes: number;
|
|
@@ -2962,6 +3404,23 @@ export type PackageRow = {
|
|
|
2962
3404
|
version: string;
|
|
2963
3405
|
};
|
|
2964
3406
|
|
|
3407
|
+
export type PackageSearchQuery = {
|
|
3408
|
+
/**
|
|
3409
|
+
* Exact architecture filter (e.g. `x86_64`, `noarch`).
|
|
3410
|
+
*/
|
|
3411
|
+
arch?: string | null;
|
|
3412
|
+
limit?: number;
|
|
3413
|
+
offset?: number;
|
|
3414
|
+
/**
|
|
3415
|
+
* Case-insensitive substring match on the package name.
|
|
3416
|
+
*/
|
|
3417
|
+
q?: string | null;
|
|
3418
|
+
/**
|
|
3419
|
+
* Curation status filter (e.g. `approved`, `pending`, `blocked`, `review`).
|
|
3420
|
+
*/
|
|
3421
|
+
status?: string | null;
|
|
3422
|
+
};
|
|
3423
|
+
|
|
2965
3424
|
export type PackageVersionResponse = {
|
|
2966
3425
|
checksum_sha256: string;
|
|
2967
3426
|
created_at: string;
|
|
@@ -3295,6 +3754,43 @@ export type ProbeBody = {
|
|
|
3295
3754
|
target_peer_id: string;
|
|
3296
3755
|
};
|
|
3297
3756
|
|
|
3757
|
+
/**
|
|
3758
|
+
* Project entity.
|
|
3759
|
+
*/
|
|
3760
|
+
export type Project = {
|
|
3761
|
+
created_at: string;
|
|
3762
|
+
description?: string | null;
|
|
3763
|
+
id: string;
|
|
3764
|
+
/**
|
|
3765
|
+
* Unique, URL-safe project key (e.g. "payments").
|
|
3766
|
+
*/
|
|
3767
|
+
key: string;
|
|
3768
|
+
name: string;
|
|
3769
|
+
/**
|
|
3770
|
+
* Storage quota in bytes. P1: stored only, NOT enforced (quotas = P3).
|
|
3771
|
+
*/
|
|
3772
|
+
quota_bytes?: number | null;
|
|
3773
|
+
updated_at: string;
|
|
3774
|
+
};
|
|
3775
|
+
|
|
3776
|
+
export type ProjectListResponse = {
|
|
3777
|
+
items: Array<Project>;
|
|
3778
|
+
};
|
|
3779
|
+
|
|
3780
|
+
export type ProjectMemberListResponse = {
|
|
3781
|
+
items: Array<ProjectMemberRow>;
|
|
3782
|
+
};
|
|
3783
|
+
|
|
3784
|
+
/**
|
|
3785
|
+
* One membership grant on a project: a `permissions` row with
|
|
3786
|
+
* `target_type = 'project'`.
|
|
3787
|
+
*/
|
|
3788
|
+
export type ProjectMemberRow = {
|
|
3789
|
+
actions: Array<string>;
|
|
3790
|
+
principal_id: string;
|
|
3791
|
+
principal_type: string;
|
|
3792
|
+
};
|
|
3793
|
+
|
|
3298
3794
|
export type PromoteArtifactRequest = {
|
|
3299
3795
|
notes?: string | null;
|
|
3300
3796
|
skip_policy_check?: boolean;
|
|
@@ -3412,9 +3908,23 @@ export type QuarantineActionResponse = {
|
|
|
3412
3908
|
new_status: string;
|
|
3413
3909
|
};
|
|
3414
3910
|
|
|
3911
|
+
export type QuarantineNowRequest = {
|
|
3912
|
+
/**
|
|
3913
|
+
* Reason shown to developers whose downloads are blocked.
|
|
3914
|
+
*/
|
|
3915
|
+
reason?: string | null;
|
|
3916
|
+
};
|
|
3917
|
+
|
|
3415
3918
|
export type QuarantineStatusResponse = {
|
|
3416
3919
|
artifact_id: string;
|
|
3417
3920
|
is_blocked: boolean;
|
|
3921
|
+
/**
|
|
3922
|
+
* Why the artifact is held, when one was recorded by a scan policy or an
|
|
3923
|
+
* admin. This is the only surface that discloses the reason: blocked
|
|
3924
|
+
* downloads return a generic message because they are reachable
|
|
3925
|
+
* anonymously on public repositories (#2912).
|
|
3926
|
+
*/
|
|
3927
|
+
quarantine_reason?: string | null;
|
|
3418
3928
|
quarantine_status?: string | null;
|
|
3419
3929
|
quarantine_until?: string | null;
|
|
3420
3930
|
};
|
|
@@ -3505,6 +4015,24 @@ export type RemoteInstanceResponse = {
|
|
|
3505
4015
|
url: string;
|
|
3506
4016
|
};
|
|
3507
4017
|
|
|
4018
|
+
export type RemoveProjectMemberRequest = {
|
|
4019
|
+
principal_id: string;
|
|
4020
|
+
principal_type: string;
|
|
4021
|
+
};
|
|
4022
|
+
|
|
4023
|
+
/**
|
|
4024
|
+
* Repository exposure descriptor echoed in the response.
|
|
4025
|
+
*/
|
|
4026
|
+
export type RepoExposure = {
|
|
4027
|
+
/**
|
|
4028
|
+
* `public` | `restricted_acl` | `restricted_roles` — see
|
|
4029
|
+
* [`classify_access_scope`].
|
|
4030
|
+
*/
|
|
4031
|
+
access_scope: string;
|
|
4032
|
+
repository_id: string;
|
|
4033
|
+
repository_key: string;
|
|
4034
|
+
};
|
|
4035
|
+
|
|
3508
4036
|
export type RepoHealthResponse = {
|
|
3509
4037
|
artifacts_evaluated: number;
|
|
3510
4038
|
artifacts_failing: number;
|
|
@@ -3580,13 +4108,78 @@ export type RepositoryResponse = {
|
|
|
3580
4108
|
* the semantics are clear for remote (pull-through cache) repositories.
|
|
3581
4109
|
*/
|
|
3582
4110
|
allow_anonymous_access: boolean;
|
|
4111
|
+
/**
|
|
4112
|
+
* Custom Description field for Debian/APT Release files. Omitted from the
|
|
4113
|
+
* Release file when `None` or empty.
|
|
4114
|
+
*/
|
|
4115
|
+
apt_description?: string | null;
|
|
4116
|
+
/**
|
|
4117
|
+
* Custom Label field for Debian/APT Release files (default: "artifact-keeper").
|
|
4118
|
+
*/
|
|
4119
|
+
apt_label?: string | null;
|
|
4120
|
+
/**
|
|
4121
|
+
* Custom Origin field for Debian/APT Release files (default: "artifact-keeper").
|
|
4122
|
+
*/
|
|
4123
|
+
apt_origin?: string | null;
|
|
4124
|
+
/**
|
|
4125
|
+
* Custom Version field for Debian/APT Release files. Omitted from the
|
|
4126
|
+
* Release file when `None` or empty.
|
|
4127
|
+
*/
|
|
4128
|
+
apt_release_version?: string | null;
|
|
3583
4129
|
created_at: string;
|
|
4130
|
+
/**
|
|
4131
|
+
* Stance applied when no curation rule matches: `allow` or `review`.
|
|
4132
|
+
*/
|
|
4133
|
+
curation_default_action: string;
|
|
4134
|
+
/**
|
|
4135
|
+
* Whether curation rules are enforced for this repository (#2912).
|
|
4136
|
+
*
|
|
4137
|
+
* Echoed back because this flag now *blocks downloads* on the PyPI proxy
|
|
4138
|
+
* paths, and a security control that cannot be read back is the same class of
|
|
4139
|
+
* problem as one that is stored but not enforced. Stored on the repositories
|
|
4140
|
+
* row, so unlike `quarantine_enabled` this needs no separate lookup.
|
|
4141
|
+
*/
|
|
4142
|
+
curation_enabled: boolean;
|
|
4143
|
+
/**
|
|
4144
|
+
* Custom User-Agent used for outbound HTTP requests to the upstream,
|
|
4145
|
+
* read back from `repository_config`. `None` when unset.
|
|
4146
|
+
*/
|
|
4147
|
+
custom_user_agent?: string | null;
|
|
4148
|
+
debian?: null | DebianRepositoryConfig;
|
|
3584
4149
|
description?: string | null;
|
|
3585
4150
|
format: string;
|
|
4151
|
+
/**
|
|
4152
|
+
* Whether a trusted upstream OpenPGP public key is configured for RPM
|
|
4153
|
+
* curation signature verification (#2568). The key material itself is
|
|
4154
|
+
* never returned; this boolean is the only exposure. `false` for repos
|
|
4155
|
+
* with no key set. Populated by the single-repo handlers (create / get /
|
|
4156
|
+
* update) and the listing; `repo_to_response` alone defaults it to `false`
|
|
4157
|
+
* (it is db-less and cannot read the column).
|
|
4158
|
+
*/
|
|
4159
|
+
has_trusted_gpg_key: boolean;
|
|
3586
4160
|
id: string;
|
|
3587
4161
|
is_public: boolean;
|
|
3588
4162
|
key: string;
|
|
3589
4163
|
name: string;
|
|
4164
|
+
/**
|
|
4165
|
+
* Whether unscoped npm names may resolve through this npm Remote
|
|
4166
|
+
* repository (#2424). Omitted when unset.
|
|
4167
|
+
*/
|
|
4168
|
+
npm_allow_unscoped?: boolean | null;
|
|
4169
|
+
/**
|
|
4170
|
+
* Allowed npm full-name glob patterns (#2424), read back from
|
|
4171
|
+
* `repository_config`. Omitted for non-npm repositories or when unset.
|
|
4172
|
+
*/
|
|
4173
|
+
npm_allowed_name_patterns?: Array<string> | null;
|
|
4174
|
+
/**
|
|
4175
|
+
* Allowed npm `@scope` literals (#2424), read back from
|
|
4176
|
+
* `repository_config`. Omitted for non-npm repositories or when unset.
|
|
4177
|
+
*/
|
|
4178
|
+
npm_allowed_scopes?: Array<string> | null;
|
|
4179
|
+
/**
|
|
4180
|
+
* Project this repository is assigned to (#2472), if any.
|
|
4181
|
+
*/
|
|
4182
|
+
project_id?: string | null;
|
|
3590
4183
|
/**
|
|
3591
4184
|
* When true, direct user uploads are rejected; artifacts must be promoted.
|
|
3592
4185
|
*/
|
|
@@ -3651,12 +4244,144 @@ export type RepositoryStorageBreakdown = {
|
|
|
3651
4244
|
download_count: number;
|
|
3652
4245
|
format: string;
|
|
3653
4246
|
last_upload_at?: string | null;
|
|
4247
|
+
/**
|
|
4248
|
+
* Downloads served by this repository's remote pull-through proxy
|
|
4249
|
+
* (`proxy_download_statistics`, #2537/#2704). Proxy-cached objects carry
|
|
4250
|
+
* no `artifacts` row (#1280), so these serves are counted in a sibling
|
|
4251
|
+
* table and were previously not readable through any API. Kept separate
|
|
4252
|
+
* from `download_count` (hosted serves) so existing consumers are
|
|
4253
|
+
* unaffected; defaults to 0 when deserializing older payloads.
|
|
4254
|
+
*/
|
|
4255
|
+
proxy_download_count?: number;
|
|
3654
4256
|
repository_id: string;
|
|
3655
4257
|
repository_key: string;
|
|
3656
4258
|
repository_name: string;
|
|
3657
4259
|
storage_bytes: number;
|
|
3658
4260
|
};
|
|
3659
4261
|
|
|
4262
|
+
/**
|
|
4263
|
+
* Deduplicated storage-accounting response for a single repository (#2056).
|
|
4264
|
+
*
|
|
4265
|
+
* All figures are read from the materialized `repository_storage_stats` cache
|
|
4266
|
+
* (refreshed on a schedule + post-GC), so this endpoint is an O(1) primary-key
|
|
4267
|
+
* lookup and never runs the heavy cross-repo aggregation. `computed_at` is the
|
|
4268
|
+
* freshness marker; it is `null` until the first refresh has run.
|
|
4269
|
+
*
|
|
4270
|
+
* Quota is unaffected: these numbers are accounting/visibility only and do NOT
|
|
4271
|
+
* change how the repository's storage quota is enforced (#2056 §7).
|
|
4272
|
+
*/
|
|
4273
|
+
export type RepositoryStorageStatsResponse = {
|
|
4274
|
+
/**
|
|
4275
|
+
* Distinct physical objects (dedup keys) this repository references.
|
|
4276
|
+
*/
|
|
4277
|
+
blob_count: number;
|
|
4278
|
+
/**
|
|
4279
|
+
* When these figures were last recomputed. `null` before the first refresh.
|
|
4280
|
+
*/
|
|
4281
|
+
computed_at?: string | null;
|
|
4282
|
+
/**
|
|
4283
|
+
* logical_bytes / physical_bytes (1.0 when nothing is stored). Restricted
|
|
4284
|
+
* on cloud backends — see [`physical_bytes`](Self::physical_bytes).
|
|
4285
|
+
*/
|
|
4286
|
+
dedup_ratio?: number | null;
|
|
4287
|
+
/**
|
|
4288
|
+
* `per_repo` (filesystem) or `instance` (cloud) — the backend semantics at
|
|
4289
|
+
* compute time.
|
|
4290
|
+
*/
|
|
4291
|
+
dedup_scope: string;
|
|
4292
|
+
/**
|
|
4293
|
+
* The instance-wide globally-distinct footprint (true disk usage). On
|
|
4294
|
+
* cloud backends the sum of per-repo `physical_bytes` OVER-counts shared
|
|
4295
|
+
* objects, so this is the authoritative instance total.
|
|
4296
|
+
*
|
|
4297
|
+
* **Admin-only:** this is a whole-instance aggregate that spans every
|
|
4298
|
+
* tenant, so it is only populated for admin callers. It is omitted from the
|
|
4299
|
+
* response entirely for repo-authorized non-admins and anonymous callers,
|
|
4300
|
+
* who see only this repository's own figures (#2559 review).
|
|
4301
|
+
*/
|
|
4302
|
+
instance_unique_bytes?: number | null;
|
|
4303
|
+
/**
|
|
4304
|
+
* Sum over every reference (per-row). Now includes OCI layer bytes, which
|
|
4305
|
+
* were previously omitted from all storage accounting.
|
|
4306
|
+
*/
|
|
4307
|
+
logical_bytes: number;
|
|
4308
|
+
/**
|
|
4309
|
+
* Deduplicated physical footprint within the dedup scope.
|
|
4310
|
+
*
|
|
4311
|
+
* **Restricted on cloud (instance-scope) backends:** on a shared-storage
|
|
4312
|
+
* backend `physical_bytes`, `unique_bytes`, `shared_bytes` and
|
|
4313
|
+
* `dedup_ratio` are all cross-tenant-derivable — `shared_bytes =
|
|
4314
|
+
* physical_bytes - unique_bytes` reveals whether this repo's blobs are also
|
|
4315
|
+
* stored by another tenant (a per-blob cross-tenant existence oracle,
|
|
4316
|
+
* #2560). The whole derivable set is therefore populated only for admins on
|
|
4317
|
+
* instance-scope backends, and omitted for repo-authorized non-admins /
|
|
4318
|
+
* anonymous callers. On `per_repo` (filesystem) backends there is no
|
|
4319
|
+
* cross-tenant sharing (`shared_bytes == 0` by construction), so all
|
|
4320
|
+
* figures are always present.
|
|
4321
|
+
*/
|
|
4322
|
+
physical_bytes?: number | null;
|
|
4323
|
+
repository_key: string;
|
|
4324
|
+
/**
|
|
4325
|
+
* physical_bytes - unique_bytes. Always 0 on filesystem backends (a shared
|
|
4326
|
+
* digest in two repos is two files). Restricted on cloud backends — see
|
|
4327
|
+
* [`physical_bytes`](Self::physical_bytes).
|
|
4328
|
+
*/
|
|
4329
|
+
shared_bytes?: number | null;
|
|
4330
|
+
/**
|
|
4331
|
+
* Physical bytes of objects referenced only by this repository.
|
|
4332
|
+
* Restricted on cloud backends — see [`physical_bytes`].
|
|
4333
|
+
*
|
|
4334
|
+
* [`physical_bytes`]: Self::physical_bytes
|
|
4335
|
+
*/
|
|
4336
|
+
unique_bytes?: number | null;
|
|
4337
|
+
};
|
|
4338
|
+
|
|
4339
|
+
/**
|
|
4340
|
+
* Per-prefix (folder tree) storage rollup response (#2601).
|
|
4341
|
+
*
|
|
4342
|
+
* All figures are read from the materialized `repository_path_storage_stats`
|
|
4343
|
+
* cache (refreshed on the storage-stats schedule + post-GC) — a tree call is
|
|
4344
|
+
* an index scan over pre-aggregated rows, never a walk of the artifact table.
|
|
4345
|
+
*
|
|
4346
|
+
* Every figure is within-repository only (references this repo holds), so
|
|
4347
|
+
* unlike the repo-level endpoint's cross-tenant-derivable dedup breakdown
|
|
4348
|
+
* (#2560) nothing here needs an admin restriction beyond repo visibility.
|
|
4349
|
+
*/
|
|
4350
|
+
export type RepositoryStorageTreeResponse = {
|
|
4351
|
+
/**
|
|
4352
|
+
* Descendant folder nodes, up to `depth` levels below `node`, largest
|
|
4353
|
+
* `logical_bytes` first.
|
|
4354
|
+
*/
|
|
4355
|
+
children: Array<StorageTreeNode>;
|
|
4356
|
+
/**
|
|
4357
|
+
* When the rollup was last recomputed. `null` before the first refresh.
|
|
4358
|
+
*/
|
|
4359
|
+
computed_at?: string | null;
|
|
4360
|
+
/**
|
|
4361
|
+
* Folder levels below the root that are individually materialized;
|
|
4362
|
+
* deeper files roll up into their ancestor at this depth.
|
|
4363
|
+
*/
|
|
4364
|
+
max_materialized_depth: number;
|
|
4365
|
+
/**
|
|
4366
|
+
* The node the listing is rooted at (zeros when the prefix has no
|
|
4367
|
+
* materialized data — unknown folder or refresher not yet run).
|
|
4368
|
+
*/
|
|
4369
|
+
node: StorageTreeNode;
|
|
4370
|
+
repository_key: string;
|
|
4371
|
+
/**
|
|
4372
|
+
* True when `limit` cut the descendant listing.
|
|
4373
|
+
*/
|
|
4374
|
+
truncated: boolean;
|
|
4375
|
+
/**
|
|
4376
|
+
* Bytes referenced by this repository that carry no logical path and so
|
|
4377
|
+
* cannot be placed in the tree (today: OCI layer blobs; the blob→image
|
|
4378
|
+
* edge lives only in manifest content). Root-level figure; present only
|
|
4379
|
+
* when the request is rooted at `''`. `node.logical_bytes +
|
|
4380
|
+
* unattributed_bytes` reconciles with the repo-level logical total.
|
|
4381
|
+
*/
|
|
4382
|
+
unattributed_bytes?: number | null;
|
|
4383
|
+
};
|
|
4384
|
+
|
|
3660
4385
|
export type RescanForInventoryRequest = {
|
|
3661
4386
|
/**
|
|
3662
4387
|
* Maximum number of artifacts to enqueue in this call. Operators
|
|
@@ -3737,6 +4462,12 @@ export type RoleResponse = {
|
|
|
3737
4462
|
|
|
3738
4463
|
/**
|
|
3739
4464
|
* Response returned by the rotate-secret endpoint.
|
|
4465
|
+
*
|
|
4466
|
+
* GHSA-qcmj: the raw signing secret is intentionally NOT returned here. A
|
|
4467
|
+
* rotation only reports success and non-reversible metadata (the display
|
|
4468
|
+
* `secret_digest` and the previous-secret expiry); the new raw secret is
|
|
4469
|
+
* retained only in encrypted form and delivered/consumed out-of-band, so it
|
|
4470
|
+
* cannot be disclosed via this response body or logs.
|
|
3740
4471
|
*/
|
|
3741
4472
|
export type RotateWebhookSecretResponse = {
|
|
3742
4473
|
id: string;
|
|
@@ -3745,9 +4476,8 @@ export type RotateWebhookSecretResponse = {
|
|
|
3745
4476
|
*/
|
|
3746
4477
|
previous_secret_expires_at: string;
|
|
3747
4478
|
/**
|
|
3748
|
-
*
|
|
4479
|
+
* Short, non-reversible identifier for the newly active signing secret.
|
|
3749
4480
|
*/
|
|
3750
|
-
secret: string;
|
|
3751
4481
|
secret_digest: string;
|
|
3752
4482
|
};
|
|
3753
4483
|
|
|
@@ -3782,6 +4512,9 @@ export type RuleEvaluationResponse = {
|
|
|
3782
4512
|
export type RuleResponse = {
|
|
3783
4513
|
action: string;
|
|
3784
4514
|
architecture: string;
|
|
4515
|
+
config: {
|
|
4516
|
+
[key: string]: unknown;
|
|
4517
|
+
};
|
|
3785
4518
|
created_at: string;
|
|
3786
4519
|
created_by?: string | null;
|
|
3787
4520
|
enabled: boolean;
|
|
@@ -3789,6 +4522,8 @@ export type RuleResponse = {
|
|
|
3789
4522
|
package_pattern: string;
|
|
3790
4523
|
priority: number;
|
|
3791
4524
|
reason: string;
|
|
4525
|
+
rule_type: string;
|
|
4526
|
+
scope: string;
|
|
3792
4527
|
staging_repo_id?: string | null;
|
|
3793
4528
|
updated_at: string;
|
|
3794
4529
|
version_constraint: string;
|
|
@@ -3817,6 +4552,12 @@ export type SamlConfigResponse = {
|
|
|
3817
4552
|
has_certificate: boolean;
|
|
3818
4553
|
id: string;
|
|
3819
4554
|
is_enabled: boolean;
|
|
4555
|
+
/**
|
|
4556
|
+
* Opt-in flag (see migration 157, #2333): when true, SAML assertion
|
|
4557
|
+
* group values are reflected as Artifact Keeper group memberships,
|
|
4558
|
+
* mirroring the OIDC flag from #1094. Defaults to false.
|
|
4559
|
+
*/
|
|
4560
|
+
map_groups_to_groups: boolean;
|
|
3820
4561
|
name: string;
|
|
3821
4562
|
name_id_format: string;
|
|
3822
4563
|
require_signed_assertions: boolean;
|
|
@@ -3861,6 +4602,11 @@ export type ScanConfigResponse = {
|
|
|
3861
4602
|
block_on_policy_violation: boolean;
|
|
3862
4603
|
created_at: string;
|
|
3863
4604
|
id: string;
|
|
4605
|
+
/**
|
|
4606
|
+
* #2954: fail-open (default) / fail-closed action for the inline proxy
|
|
4607
|
+
* scan-on-fetch.
|
|
4608
|
+
*/
|
|
4609
|
+
proxy_scan_action: string;
|
|
3864
4610
|
repository_id: string;
|
|
3865
4611
|
scan_enabled: boolean;
|
|
3866
4612
|
scan_on_proxy: boolean;
|
|
@@ -3878,6 +4624,23 @@ export type ScanResponse = {
|
|
|
3878
4624
|
artifact_id: string;
|
|
3879
4625
|
artifact_name?: string | null;
|
|
3880
4626
|
artifact_version?: string | null;
|
|
4627
|
+
/**
|
|
4628
|
+
* #2471: number of `not_applicable` scanner rows folded into this row.
|
|
4629
|
+
* `Some(n)` marks a synthetic *summary* row that collapses `n` redundant
|
|
4630
|
+
* "this scanner does not apply" results (e.g. the image-family scanners
|
|
4631
|
+
* `filesystem`/`incus`/`openscap` all declining on a Docker image) into a
|
|
4632
|
+
* single muted "not applicable to this artifact" indication, so the UI
|
|
4633
|
+
* stops rendering N rows that read as N failures. `None` for every real
|
|
4634
|
+
* (non-collapsed) scan row. Omitted from the wire when `None`.
|
|
4635
|
+
*/
|
|
4636
|
+
collapsed_not_applicable_count?: number | null;
|
|
4637
|
+
/**
|
|
4638
|
+
* #2471: the individual `scan_type` values folded into a summary row,
|
|
4639
|
+
* sorted and de-duplicated (e.g. `["filesystem","incus","openscap"]`).
|
|
4640
|
+
* Present only on a synthetic summary row (alongside
|
|
4641
|
+
* `collapsed_not_applicable_count`); `None` / omitted otherwise.
|
|
4642
|
+
*/
|
|
4643
|
+
collapsed_scan_types?: Array<string> | null;
|
|
3881
4644
|
completed_at?: string | null;
|
|
3882
4645
|
created_at: string;
|
|
3883
4646
|
critical_count: number;
|
|
@@ -4080,12 +4843,35 @@ export type SetRoutingRulesRequest = {
|
|
|
4080
4843
|
* Response body for the setup status endpoint.
|
|
4081
4844
|
*/
|
|
4082
4845
|
export type SetupStatusResponse = {
|
|
4846
|
+
/**
|
|
4847
|
+
* Optional deployment-aware instruction for retrieving the generated
|
|
4848
|
+
* initial admin password, sourced from the `SETUP_PASSWORD_HINT` env var.
|
|
4849
|
+
* Present only when an operator has configured it; when absent, the web UI
|
|
4850
|
+
* falls back to its built-in Docker Compose instruction (#2802).
|
|
4851
|
+
*/
|
|
4852
|
+
setup_password_hint?: string | null;
|
|
4083
4853
|
/**
|
|
4084
4854
|
* Whether the initial admin password change is still required.
|
|
4085
4855
|
*/
|
|
4086
4856
|
setup_required: boolean;
|
|
4087
4857
|
};
|
|
4088
4858
|
|
|
4859
|
+
/**
|
|
4860
|
+
* Response from a deliberate per-artifact signing action (#2535).
|
|
4861
|
+
*/
|
|
4862
|
+
export type SignArtifactResponse = {
|
|
4863
|
+
algorithm: string;
|
|
4864
|
+
artifact_id: string;
|
|
4865
|
+
/**
|
|
4866
|
+
* The active signing key that produced the attestation.
|
|
4867
|
+
*/
|
|
4868
|
+
key_id: string;
|
|
4869
|
+
/**
|
|
4870
|
+
* SHA-256 of the produced signature blob (the blob itself is not persisted).
|
|
4871
|
+
*/
|
|
4872
|
+
signature_sha256: string;
|
|
4873
|
+
};
|
|
4874
|
+
|
|
4089
4875
|
export type SigningConfigResponse = {
|
|
4090
4876
|
key?: null | SigningKeyPublic;
|
|
4091
4877
|
repository_id: string;
|
|
@@ -4236,6 +5022,61 @@ export type StorageSnapshot = {
|
|
|
4236
5022
|
total_users: number;
|
|
4237
5023
|
};
|
|
4238
5024
|
|
|
5025
|
+
/**
|
|
5026
|
+
* One folder node in the per-prefix storage rollup (#2601).
|
|
5027
|
+
*/
|
|
5028
|
+
export type StorageTreeNode = {
|
|
5029
|
+
/**
|
|
5030
|
+
* Distinct physical objects under this prefix.
|
|
5031
|
+
*/
|
|
5032
|
+
blob_count: number;
|
|
5033
|
+
/**
|
|
5034
|
+
* Number of path segments in `prefix` (0 = root).
|
|
5035
|
+
*/
|
|
5036
|
+
depth: number;
|
|
5037
|
+
/**
|
|
5038
|
+
* References (artifact/proxy-cache rows) under this prefix.
|
|
5039
|
+
*/
|
|
5040
|
+
file_count: number;
|
|
5041
|
+
/**
|
|
5042
|
+
* Sum over every artifact/proxy-cache reference under this prefix.
|
|
5043
|
+
*/
|
|
5044
|
+
logical_bytes: number;
|
|
5045
|
+
/**
|
|
5046
|
+
* Deduplicated within this repository: each distinct physical object
|
|
5047
|
+
* under the prefix counted once. Because an object shared by two sibling
|
|
5048
|
+
* subtrees counts once in each but once at their common ancestor, the sum
|
|
5049
|
+
* of children's `physical_bytes` can exceed the parent's — the difference
|
|
5050
|
+
* is the cross-subtree dedup saving.
|
|
5051
|
+
*/
|
|
5052
|
+
physical_bytes: number;
|
|
5053
|
+
/**
|
|
5054
|
+
* Canonical prefix (no leading/trailing `/`; `''` = repository root).
|
|
5055
|
+
*/
|
|
5056
|
+
prefix: string;
|
|
5057
|
+
};
|
|
5058
|
+
|
|
5059
|
+
/**
|
|
5060
|
+
* Query parameters for the per-prefix storage tree (#2601).
|
|
5061
|
+
*/
|
|
5062
|
+
export type StorageTreeQuery = {
|
|
5063
|
+
/**
|
|
5064
|
+
* How many tree levels below `prefix` to return (default 1 = immediate
|
|
5065
|
+
* children, clamped to 1..=5).
|
|
5066
|
+
*/
|
|
5067
|
+
depth?: number | null;
|
|
5068
|
+
/**
|
|
5069
|
+
* Maximum number of descendant nodes returned (default 200, clamped to
|
|
5070
|
+
* 1..=1000). `truncated` is set when the limit cut the listing.
|
|
5071
|
+
*/
|
|
5072
|
+
limit?: number | null;
|
|
5073
|
+
/**
|
|
5074
|
+
* Folder prefix to root the listing at (`''`/absent = repository root).
|
|
5075
|
+
* Leading/trailing slashes are ignored.
|
|
5076
|
+
*/
|
|
5077
|
+
prefix?: string | null;
|
|
5078
|
+
};
|
|
5079
|
+
|
|
4239
5080
|
export type SubmitCrashesRequest = {
|
|
4240
5081
|
ids: Array<string>;
|
|
4241
5082
|
};
|
|
@@ -4330,6 +5171,23 @@ export type SyncTaskResponse = {
|
|
|
4330
5171
|
storage_key: string;
|
|
4331
5172
|
};
|
|
4332
5173
|
|
|
5174
|
+
export type SyncTriggerResponse = {
|
|
5175
|
+
/**
|
|
5176
|
+
* The repository key the sync was triggered for.
|
|
5177
|
+
*/
|
|
5178
|
+
repository: string;
|
|
5179
|
+
/**
|
|
5180
|
+
* Whether the sync pass completed without error. A false value with
|
|
5181
|
+
* `triggered = true` means the pass ran but an upstream fetch/verify step
|
|
5182
|
+
* failed for the repo (details are in the server logs, not this response).
|
|
5183
|
+
*/
|
|
5184
|
+
succeeded: boolean;
|
|
5185
|
+
/**
|
|
5186
|
+
* Always true when the trigger was accepted and a sync pass ran.
|
|
5187
|
+
*/
|
|
5188
|
+
triggered: boolean;
|
|
5189
|
+
};
|
|
5190
|
+
|
|
4333
5191
|
/**
|
|
4334
5192
|
* Runtime configuration values.
|
|
4335
5193
|
*
|
|
@@ -4698,11 +5556,21 @@ export type UpdateLdapConfigRequest = {
|
|
|
4698
5556
|
admin_group_dn?: string | null;
|
|
4699
5557
|
bind_dn?: string | null;
|
|
4700
5558
|
bind_password?: string | null;
|
|
5559
|
+
/**
|
|
5560
|
+
* Inline PEM CA certificate/chain (migration 174, #2782). Omit to leave
|
|
5561
|
+
* unchanged; send an empty string to clear.
|
|
5562
|
+
*/
|
|
5563
|
+
ca_certificate?: string | null;
|
|
4701
5564
|
display_name_attribute?: string | null;
|
|
4702
5565
|
email_attribute?: string | null;
|
|
4703
5566
|
group_base_dn?: string | null;
|
|
4704
5567
|
group_filter?: string | null;
|
|
4705
5568
|
groups_attribute?: string | null;
|
|
5569
|
+
/**
|
|
5570
|
+
* See `CreateLdapConfigRequest::insecure_skip_verify` (migration 174,
|
|
5571
|
+
* #2782). Omit to leave the stored value unchanged.
|
|
5572
|
+
*/
|
|
5573
|
+
insecure_skip_verify?: boolean | null;
|
|
4706
5574
|
is_enabled?: boolean | null;
|
|
4707
5575
|
name?: string | null;
|
|
4708
5576
|
priority?: number | null;
|
|
@@ -4790,6 +5658,12 @@ export type UpdatePolicyRequest = {
|
|
|
4790
5658
|
require_signature?: boolean | null;
|
|
4791
5659
|
};
|
|
4792
5660
|
|
|
5661
|
+
export type UpdateProjectRequest = {
|
|
5662
|
+
description?: string | null;
|
|
5663
|
+
name?: string | null;
|
|
5664
|
+
quota_bytes?: number | null;
|
|
5665
|
+
};
|
|
5666
|
+
|
|
4793
5667
|
export type UpdateRepositoryRequest = {
|
|
4794
5668
|
/**
|
|
4795
5669
|
* Alias for `is_public`. When set to true, anonymous users can download
|
|
@@ -4800,6 +5674,57 @@ export type UpdateRepositoryRequest = {
|
|
|
4800
5674
|
* `allow_anonymous_access` takes precedence.
|
|
4801
5675
|
*/
|
|
4802
5676
|
allow_anonymous_access?: boolean | null;
|
|
5677
|
+
/**
|
|
5678
|
+
* Custom Description field for Debian/APT Release files. Pass an empty
|
|
5679
|
+
* string to remove (omits the field entirely from the Release file).
|
|
5680
|
+
* Stored in `repository_config` under `apt_description`.
|
|
5681
|
+
*/
|
|
5682
|
+
apt_description?: string | null;
|
|
5683
|
+
/**
|
|
5684
|
+
* Custom Label field for Debian/APT Release files. Pass an empty string
|
|
5685
|
+
* to reset to the default ("artifact-keeper").
|
|
5686
|
+
* Stored in `repository_config` under `apt_label`.
|
|
5687
|
+
*/
|
|
5688
|
+
apt_label?: string | null;
|
|
5689
|
+
/**
|
|
5690
|
+
* Custom Origin field for Debian/APT Release files. Pass an empty string
|
|
5691
|
+
* to reset to the default ("artifact-keeper").
|
|
5692
|
+
* Stored in `repository_config` under `apt_origin`.
|
|
5693
|
+
*/
|
|
5694
|
+
apt_origin?: string | null;
|
|
5695
|
+
/**
|
|
5696
|
+
* Custom Version field for Debian/APT Release files. Pass an empty
|
|
5697
|
+
* string to remove (omits the field entirely from the Release file).
|
|
5698
|
+
* Stored in `repository_config` under `apt_release_version`.
|
|
5699
|
+
*/
|
|
5700
|
+
apt_release_version?: string | null;
|
|
5701
|
+
/**
|
|
5702
|
+
* Update the keyless-sync unverified-ingest opt-in (#2569). When provided,
|
|
5703
|
+
* sets `curation_allow_unverified` (`false` restores the fail-closed
|
|
5704
|
+
* default; `true` opts into legacy unverified ingest). Omit to leave it
|
|
5705
|
+
* unchanged.
|
|
5706
|
+
*/
|
|
5707
|
+
curation_allow_unverified?: boolean | null;
|
|
5708
|
+
/**
|
|
5709
|
+
* Default curation action when no rule matches: allow or review.
|
|
5710
|
+
* "block" is rejected (DB CHECK, migration 071); use block rules for
|
|
5711
|
+
* specific packages instead.
|
|
5712
|
+
*
|
|
5713
|
+
* The allowed set is spelled out in the schema so a generated SDK presents it
|
|
5714
|
+
* rather than an unconstrained string.
|
|
5715
|
+
*/
|
|
5716
|
+
curation_default_action: string;
|
|
5717
|
+
/**
|
|
5718
|
+
* Enable curation-rule enforcement on this repository's proxy paths.
|
|
5719
|
+
*/
|
|
5720
|
+
curation_enabled?: boolean | null;
|
|
5721
|
+
/**
|
|
5722
|
+
* Update the custom User-Agent for outbound HTTP requests to the upstream.
|
|
5723
|
+
* Only valid for remote repositories. Pass an empty string to remove.
|
|
5724
|
+
* Max 256 characters. Stored in `repository_config` under `custom_user_agent`.
|
|
5725
|
+
*/
|
|
5726
|
+
custom_user_agent?: string | null;
|
|
5727
|
+
debian?: null | DebianConfigPatch;
|
|
4803
5728
|
description?: string | null;
|
|
4804
5729
|
/**
|
|
4805
5730
|
* Update the Cargo index upstream URL (stored in `repository_config`).
|
|
@@ -4809,6 +5734,28 @@ export type UpdateRepositoryRequest = {
|
|
|
4809
5734
|
is_public?: boolean | null;
|
|
4810
5735
|
key?: string | null;
|
|
4811
5736
|
name?: string | null;
|
|
5737
|
+
/**
|
|
5738
|
+
* Update whether unscoped npm package names may resolve through this npm
|
|
5739
|
+
* Remote repository (#2424). Stored under `npm_allow_unscoped`.
|
|
5740
|
+
*/
|
|
5741
|
+
npm_allow_unscoped?: boolean | null;
|
|
5742
|
+
/**
|
|
5743
|
+
* Update the allowed npm full-name glob patterns for this npm Remote
|
|
5744
|
+
* repository (#2424). When provided, replaces the stored
|
|
5745
|
+
* `npm_allowed_name_patterns` list.
|
|
5746
|
+
*/
|
|
5747
|
+
npm_allowed_name_patterns?: Array<string> | null;
|
|
5748
|
+
/**
|
|
5749
|
+
* Update the allowed npm `@scope` literals for this npm Remote repository
|
|
5750
|
+
* (#2424). When provided, replaces the stored `npm_allowed_scopes` list.
|
|
5751
|
+
*/
|
|
5752
|
+
npm_allowed_scopes?: Array<string> | null;
|
|
5753
|
+
/**
|
|
5754
|
+
* Assign this repository to a project (#2472). P1 is set-only: omitting
|
|
5755
|
+
* the field leaves the assignment unchanged (unassignment ships with the
|
|
5756
|
+
* project-admin surface in P2).
|
|
5757
|
+
*/
|
|
5758
|
+
project_id?: string | null;
|
|
4812
5759
|
/**
|
|
4813
5760
|
* When provided, enables/disables the `promotion_only` policy for this
|
|
4814
5761
|
* repository (admin-only). When omitted, the flag is left unchanged.
|
|
@@ -4841,6 +5788,15 @@ export type UpdateRepositoryRequest = {
|
|
|
4841
5788
|
* Stored in `repository_config` under `release_repository_id`.
|
|
4842
5789
|
*/
|
|
4843
5790
|
release_repository_key?: string | null;
|
|
5791
|
+
/**
|
|
5792
|
+
* Update the trusted upstream OpenPGP public key for RPM curation (#2568).
|
|
5793
|
+
* Three-way semantics via `Option<Option<String>>`: omit the field to
|
|
5794
|
+
* leave the stored key unchanged; send `null` to clear it (revert to
|
|
5795
|
+
* "unverified upstream"); send an ASCII-armored PUBLIC key block to set
|
|
5796
|
+
* it. A private-key block or malformed armor is rejected (400). The
|
|
5797
|
+
* response never echoes the key — only `has_trusted_gpg_key`.
|
|
5798
|
+
*/
|
|
5799
|
+
trusted_gpg_key?: string | null;
|
|
4844
5800
|
/**
|
|
4845
5801
|
* When provided, enables/disables first-class artifact versioning for
|
|
4846
5802
|
* this Generic/Mlmodel repository (#2367). When omitted, unchanged.
|
|
@@ -4868,6 +5824,7 @@ export type UpdateSamlConfigRequest = {
|
|
|
4868
5824
|
certificate?: string | null;
|
|
4869
5825
|
entity_id?: string | null;
|
|
4870
5826
|
is_enabled?: boolean | null;
|
|
5827
|
+
map_groups_to_groups?: boolean | null;
|
|
4871
5828
|
name?: string | null;
|
|
4872
5829
|
name_id_format?: string | null;
|
|
4873
5830
|
require_signed_assertions?: boolean | null;
|
|
@@ -4947,6 +5904,11 @@ export type UpsertLicensePolicyRequest = {
|
|
|
4947
5904
|
*/
|
|
4948
5905
|
export type UpsertScanConfigRequest = {
|
|
4949
5906
|
block_on_policy_violation?: boolean | null;
|
|
5907
|
+
/**
|
|
5908
|
+
* #2954: `'fail_open'` (default) | `'fail_closed'` for the inline proxy
|
|
5909
|
+
* scan-on-fetch action.
|
|
5910
|
+
*/
|
|
5911
|
+
proxy_scan_action?: string | null;
|
|
4950
5912
|
scan_enabled?: boolean | null;
|
|
4951
5913
|
scan_on_proxy?: boolean | null;
|
|
4952
5914
|
scan_on_upload?: boolean | null;
|
|
@@ -4982,6 +5944,25 @@ export type UserResponse = {
|
|
|
4982
5944
|
username: string;
|
|
4983
5945
|
};
|
|
4984
5946
|
|
|
5947
|
+
export type VersionResponse = {
|
|
5948
|
+
/**
|
|
5949
|
+
* The number of approved packages frozen into the snapshot.
|
|
5950
|
+
*/
|
|
5951
|
+
package_count: number;
|
|
5952
|
+
/**
|
|
5953
|
+
* Whether this version's signed repodata has been published yet.
|
|
5954
|
+
*/
|
|
5955
|
+
published: boolean;
|
|
5956
|
+
/**
|
|
5957
|
+
* The repository key the version belongs to.
|
|
5958
|
+
*/
|
|
5959
|
+
repository: string;
|
|
5960
|
+
/**
|
|
5961
|
+
* The monotonic snapshot number (published/served under `/rpm/{key}/@N/`).
|
|
5962
|
+
*/
|
|
5963
|
+
version_number: number;
|
|
5964
|
+
};
|
|
5965
|
+
|
|
4985
5966
|
export type VirtualMemberPriority = {
|
|
4986
5967
|
member_key: string;
|
|
4987
5968
|
priority: number;
|
|
@@ -5154,6 +6135,21 @@ export type RejectReviewResponses = {
|
|
|
5154
6135
|
|
|
5155
6136
|
export type RejectReviewResponse = RejectReviewResponses[keyof RejectReviewResponses];
|
|
5156
6137
|
|
|
6138
|
+
export type ReopenReviewData = {
|
|
6139
|
+
body: ReviewActionRequest;
|
|
6140
|
+
path: {
|
|
6141
|
+
id: string;
|
|
6142
|
+
};
|
|
6143
|
+
query?: never;
|
|
6144
|
+
url: '/api/v1/admin/age-gate/reviews/{id}/reopen';
|
|
6145
|
+
};
|
|
6146
|
+
|
|
6147
|
+
export type ReopenReviewResponses = {
|
|
6148
|
+
200: AgeGateReviewResponse;
|
|
6149
|
+
};
|
|
6150
|
+
|
|
6151
|
+
export type ReopenReviewResponse = ReopenReviewResponses[keyof ReopenReviewResponses];
|
|
6152
|
+
|
|
5157
6153
|
export type GetStaleArtifactsData = {
|
|
5158
6154
|
body?: never;
|
|
5159
6155
|
path?: never;
|
|
@@ -6559,6 +7555,53 @@ export type TriggerSearchReindexResponses = {
|
|
|
6559
7555
|
|
|
6560
7556
|
export type TriggerSearchReindexResponse = TriggerSearchReindexResponses[keyof TriggerSearchReindexResponses];
|
|
6561
7557
|
|
|
7558
|
+
export type ArtifactAccessibleUsersData = {
|
|
7559
|
+
body?: never;
|
|
7560
|
+
path: {
|
|
7561
|
+
/**
|
|
7562
|
+
* Artifact id
|
|
7563
|
+
*/
|
|
7564
|
+
artifact_id: string;
|
|
7565
|
+
};
|
|
7566
|
+
query?: {
|
|
7567
|
+
/**
|
|
7568
|
+
* Repository to scope the enumeration to. **Required** for the CVE route
|
|
7569
|
+
* (a CVE spans many repos); ignored for the artifact route (implied by the
|
|
7570
|
+
* artifact).
|
|
7571
|
+
*/
|
|
7572
|
+
repository_id?: string | null;
|
|
7573
|
+
/**
|
|
7574
|
+
* 1-based page over the accessible-users list.
|
|
7575
|
+
*/
|
|
7576
|
+
page?: number | null;
|
|
7577
|
+
/**
|
|
7578
|
+
* Users per page (1..=100, default 20).
|
|
7579
|
+
*/
|
|
7580
|
+
per_page?: number | null;
|
|
7581
|
+
};
|
|
7582
|
+
url: '/api/v1/admin/security/artifact/{artifact_id}/accessible-users';
|
|
7583
|
+
};
|
|
7584
|
+
|
|
7585
|
+
export type ArtifactAccessibleUsersErrors = {
|
|
7586
|
+
/**
|
|
7587
|
+
* Admin privileges required
|
|
7588
|
+
*/
|
|
7589
|
+
403: unknown;
|
|
7590
|
+
/**
|
|
7591
|
+
* Artifact not found
|
|
7592
|
+
*/
|
|
7593
|
+
404: unknown;
|
|
7594
|
+
};
|
|
7595
|
+
|
|
7596
|
+
export type ArtifactAccessibleUsersResponses = {
|
|
7597
|
+
/**
|
|
7598
|
+
* Accessible-not-downloaded report
|
|
7599
|
+
*/
|
|
7600
|
+
200: AccessibleUsersResponse;
|
|
7601
|
+
};
|
|
7602
|
+
|
|
7603
|
+
export type ArtifactAccessibleUsersResponse = ArtifactAccessibleUsersResponses[keyof ArtifactAccessibleUsersResponses];
|
|
7604
|
+
|
|
6562
7605
|
export type ArtifactBlastRadiusData = {
|
|
6563
7606
|
body?: never;
|
|
6564
7607
|
path: {
|
|
@@ -6608,6 +7651,57 @@ export type ArtifactBlastRadiusResponses = {
|
|
|
6608
7651
|
|
|
6609
7652
|
export type ArtifactBlastRadiusResponse = ArtifactBlastRadiusResponses[keyof ArtifactBlastRadiusResponses];
|
|
6610
7653
|
|
|
7654
|
+
export type CveAccessibleUsersData = {
|
|
7655
|
+
body?: never;
|
|
7656
|
+
path: {
|
|
7657
|
+
/**
|
|
7658
|
+
* CVE id (exact match, e.g. CVE-2021-44228)
|
|
7659
|
+
*/
|
|
7660
|
+
cve_id: string;
|
|
7661
|
+
};
|
|
7662
|
+
query?: {
|
|
7663
|
+
/**
|
|
7664
|
+
* Repository to scope the enumeration to. **Required** for the CVE route
|
|
7665
|
+
* (a CVE spans many repos); ignored for the artifact route (implied by the
|
|
7666
|
+
* artifact).
|
|
7667
|
+
*/
|
|
7668
|
+
repository_id?: string | null;
|
|
7669
|
+
/**
|
|
7670
|
+
* 1-based page over the accessible-users list.
|
|
7671
|
+
*/
|
|
7672
|
+
page?: number | null;
|
|
7673
|
+
/**
|
|
7674
|
+
* Users per page (1..=100, default 20).
|
|
7675
|
+
*/
|
|
7676
|
+
per_page?: number | null;
|
|
7677
|
+
};
|
|
7678
|
+
url: '/api/v1/admin/security/cve/{cve_id}/accessible-users';
|
|
7679
|
+
};
|
|
7680
|
+
|
|
7681
|
+
export type CveAccessibleUsersErrors = {
|
|
7682
|
+
/**
|
|
7683
|
+
* Invalid parameter
|
|
7684
|
+
*/
|
|
7685
|
+
400: unknown;
|
|
7686
|
+
/**
|
|
7687
|
+
* Admin privileges required
|
|
7688
|
+
*/
|
|
7689
|
+
403: unknown;
|
|
7690
|
+
/**
|
|
7691
|
+
* CVE does not affect the repository
|
|
7692
|
+
*/
|
|
7693
|
+
404: unknown;
|
|
7694
|
+
};
|
|
7695
|
+
|
|
7696
|
+
export type CveAccessibleUsersResponses = {
|
|
7697
|
+
/**
|
|
7698
|
+
* Accessible-not-downloaded report
|
|
7699
|
+
*/
|
|
7700
|
+
200: AccessibleUsersResponse;
|
|
7701
|
+
};
|
|
7702
|
+
|
|
7703
|
+
export type CveAccessibleUsersResponse = CveAccessibleUsersResponses[keyof CveAccessibleUsersResponses];
|
|
7704
|
+
|
|
6611
7705
|
export type CveBlastRadiusData = {
|
|
6612
7706
|
body?: never;
|
|
6613
7707
|
path: {
|
|
@@ -8716,19 +9810,166 @@ export type BlockPackageResponses = {
|
|
|
8716
9810
|
|
|
8717
9811
|
export type BlockPackageResponse = BlockPackageResponses[keyof BlockPackageResponses];
|
|
8718
9812
|
|
|
8719
|
-
export type
|
|
9813
|
+
export type SearchCurationPackagesData = {
|
|
8720
9814
|
body?: never;
|
|
8721
|
-
path
|
|
8722
|
-
query?: {
|
|
9815
|
+
path: {
|
|
8723
9816
|
/**
|
|
8724
|
-
*
|
|
9817
|
+
* Staging repository key
|
|
8725
9818
|
*/
|
|
8726
|
-
|
|
9819
|
+
repo_key: string;
|
|
8727
9820
|
};
|
|
8728
|
-
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
9821
|
+
query?: {
|
|
9822
|
+
/**
|
|
9823
|
+
* Case-insensitive substring match on the package name.
|
|
9824
|
+
*/
|
|
9825
|
+
q?: string | null;
|
|
9826
|
+
/**
|
|
9827
|
+
* Exact architecture filter (e.g. `x86_64`, `noarch`).
|
|
9828
|
+
*/
|
|
9829
|
+
arch?: string | null;
|
|
9830
|
+
/**
|
|
9831
|
+
* Curation status filter (e.g. `approved`, `pending`, `blocked`, `review`).
|
|
9832
|
+
*/
|
|
9833
|
+
status?: string | null;
|
|
9834
|
+
limit?: number;
|
|
9835
|
+
offset?: number;
|
|
9836
|
+
};
|
|
9837
|
+
url: '/api/v1/curation/repos/{repo_key}/packages/search';
|
|
9838
|
+
};
|
|
9839
|
+
|
|
9840
|
+
export type SearchCurationPackagesErrors = {
|
|
9841
|
+
/**
|
|
9842
|
+
* Repository not found or not visible
|
|
9843
|
+
*/
|
|
9844
|
+
404: unknown;
|
|
9845
|
+
};
|
|
9846
|
+
|
|
9847
|
+
export type SearchCurationPackagesResponses = {
|
|
9848
|
+
200: Array<CurationPackageResponse>;
|
|
9849
|
+
};
|
|
9850
|
+
|
|
9851
|
+
export type SearchCurationPackagesResponse = SearchCurationPackagesResponses[keyof SearchCurationPackagesResponses];
|
|
9852
|
+
|
|
9853
|
+
export type TriggerCurationSyncData = {
|
|
9854
|
+
body?: never;
|
|
9855
|
+
path: {
|
|
9856
|
+
/**
|
|
9857
|
+
* Staging repository key
|
|
9858
|
+
*/
|
|
9859
|
+
repo_key: string;
|
|
9860
|
+
};
|
|
9861
|
+
query?: never;
|
|
9862
|
+
url: '/api/v1/curation/repos/{repo_key}/sync';
|
|
9863
|
+
};
|
|
9864
|
+
|
|
9865
|
+
export type TriggerCurationSyncErrors = {
|
|
9866
|
+
/**
|
|
9867
|
+
* Not authorized to trigger a sync for this repo
|
|
9868
|
+
*/
|
|
9869
|
+
403: unknown;
|
|
9870
|
+
/**
|
|
9871
|
+
* Repository not found
|
|
9872
|
+
*/
|
|
9873
|
+
404: unknown;
|
|
9874
|
+
};
|
|
9875
|
+
|
|
9876
|
+
export type TriggerCurationSyncResponses = {
|
|
9877
|
+
200: SyncTriggerResponse;
|
|
9878
|
+
};
|
|
9879
|
+
|
|
9880
|
+
export type TriggerCurationSyncResponse = TriggerCurationSyncResponses[keyof TriggerCurationSyncResponses];
|
|
9881
|
+
|
|
9882
|
+
export type CreateCurationVersionData = {
|
|
9883
|
+
body?: never;
|
|
9884
|
+
path: {
|
|
9885
|
+
/**
|
|
9886
|
+
* Staging repository key
|
|
9887
|
+
*/
|
|
9888
|
+
repo_key: string;
|
|
9889
|
+
};
|
|
9890
|
+
query?: never;
|
|
9891
|
+
url: '/api/v1/curation/repos/{repo_key}/versions';
|
|
9892
|
+
};
|
|
9893
|
+
|
|
9894
|
+
export type CreateCurationVersionErrors = {
|
|
9895
|
+
/**
|
|
9896
|
+
* No approved packages / packages need re-sync
|
|
9897
|
+
*/
|
|
9898
|
+
400: unknown;
|
|
9899
|
+
/**
|
|
9900
|
+
* Not authorized for this repo
|
|
9901
|
+
*/
|
|
9902
|
+
403: unknown;
|
|
9903
|
+
/**
|
|
9904
|
+
* Repository not found
|
|
9905
|
+
*/
|
|
9906
|
+
404: unknown;
|
|
9907
|
+
};
|
|
9908
|
+
|
|
9909
|
+
export type CreateCurationVersionResponses = {
|
|
9910
|
+
201: VersionResponse;
|
|
9911
|
+
};
|
|
9912
|
+
|
|
9913
|
+
export type CreateCurationVersionResponse = CreateCurationVersionResponses[keyof CreateCurationVersionResponses];
|
|
9914
|
+
|
|
9915
|
+
export type PublishCurationVersionData = {
|
|
9916
|
+
body?: never;
|
|
9917
|
+
path: {
|
|
9918
|
+
/**
|
|
9919
|
+
* Staging repository key
|
|
9920
|
+
*/
|
|
9921
|
+
repo_key: string;
|
|
9922
|
+
/**
|
|
9923
|
+
* Version number to publish
|
|
9924
|
+
*/
|
|
9925
|
+
n: number;
|
|
9926
|
+
};
|
|
9927
|
+
query?: never;
|
|
9928
|
+
url: '/api/v1/curation/repos/{repo_key}/versions/{n}/publish';
|
|
9929
|
+
};
|
|
9930
|
+
|
|
9931
|
+
export type PublishCurationVersionErrors = {
|
|
9932
|
+
/**
|
|
9933
|
+
* Empty version / missing snippet / no signing key
|
|
9934
|
+
*/
|
|
9935
|
+
400: unknown;
|
|
9936
|
+
/**
|
|
9937
|
+
* Not authorized for this repo
|
|
9938
|
+
*/
|
|
9939
|
+
403: unknown;
|
|
9940
|
+
/**
|
|
9941
|
+
* Repository or version not found
|
|
9942
|
+
*/
|
|
9943
|
+
404: unknown;
|
|
9944
|
+
/**
|
|
9945
|
+
* Version already published (immutable)
|
|
9946
|
+
*/
|
|
9947
|
+
409: unknown;
|
|
9948
|
+
};
|
|
9949
|
+
|
|
9950
|
+
export type PublishCurationVersionResponses = {
|
|
9951
|
+
200: VersionResponse;
|
|
9952
|
+
};
|
|
9953
|
+
|
|
9954
|
+
export type PublishCurationVersionResponse = PublishCurationVersionResponses[keyof PublishCurationVersionResponses];
|
|
9955
|
+
|
|
9956
|
+
export type ListCurationRulesData = {
|
|
9957
|
+
body?: never;
|
|
9958
|
+
path?: never;
|
|
9959
|
+
query?: {
|
|
9960
|
+
/**
|
|
9961
|
+
* Filter by staging repo
|
|
9962
|
+
*/
|
|
9963
|
+
staging_repo_id?: string;
|
|
9964
|
+
/**
|
|
9965
|
+
* Filter by rule scope: `global` lists only the instance-wide baseline rules (admin-only)
|
|
9966
|
+
*/
|
|
9967
|
+
scope?: string;
|
|
9968
|
+
};
|
|
9969
|
+
url: '/api/v1/curation/rules';
|
|
9970
|
+
};
|
|
9971
|
+
|
|
9972
|
+
export type ListCurationRulesResponses = {
|
|
8732
9973
|
200: Array<RuleResponse>;
|
|
8733
9974
|
};
|
|
8734
9975
|
|
|
@@ -11523,181 +12764,459 @@ export type GetPluginData = {
|
|
|
11523
12764
|
body?: never;
|
|
11524
12765
|
path: {
|
|
11525
12766
|
/**
|
|
11526
|
-
* Plugin ID
|
|
12767
|
+
* Plugin ID
|
|
12768
|
+
*/
|
|
12769
|
+
id: string;
|
|
12770
|
+
};
|
|
12771
|
+
query?: never;
|
|
12772
|
+
url: '/api/v1/plugins/{id}';
|
|
12773
|
+
};
|
|
12774
|
+
|
|
12775
|
+
export type GetPluginErrors = {
|
|
12776
|
+
/**
|
|
12777
|
+
* Plugin not found
|
|
12778
|
+
*/
|
|
12779
|
+
404: unknown;
|
|
12780
|
+
};
|
|
12781
|
+
|
|
12782
|
+
export type GetPluginResponses = {
|
|
12783
|
+
/**
|
|
12784
|
+
* Plugin details
|
|
12785
|
+
*/
|
|
12786
|
+
200: PluginResponse;
|
|
12787
|
+
};
|
|
12788
|
+
|
|
12789
|
+
export type GetPluginResponse = GetPluginResponses[keyof GetPluginResponses];
|
|
12790
|
+
|
|
12791
|
+
export type GetPluginConfigData = {
|
|
12792
|
+
body?: never;
|
|
12793
|
+
path: {
|
|
12794
|
+
/**
|
|
12795
|
+
* Plugin ID
|
|
12796
|
+
*/
|
|
12797
|
+
id: string;
|
|
12798
|
+
};
|
|
12799
|
+
query?: never;
|
|
12800
|
+
url: '/api/v1/plugins/{id}/config';
|
|
12801
|
+
};
|
|
12802
|
+
|
|
12803
|
+
export type GetPluginConfigErrors = {
|
|
12804
|
+
/**
|
|
12805
|
+
* Admin privileges required
|
|
12806
|
+
*/
|
|
12807
|
+
403: unknown;
|
|
12808
|
+
/**
|
|
12809
|
+
* Plugin not found
|
|
12810
|
+
*/
|
|
12811
|
+
404: unknown;
|
|
12812
|
+
};
|
|
12813
|
+
|
|
12814
|
+
export type GetPluginConfigResponses = {
|
|
12815
|
+
/**
|
|
12816
|
+
* Plugin configuration
|
|
12817
|
+
*/
|
|
12818
|
+
200: PluginConfigResponse;
|
|
12819
|
+
};
|
|
12820
|
+
|
|
12821
|
+
export type GetPluginConfigResponse = GetPluginConfigResponses[keyof GetPluginConfigResponses];
|
|
12822
|
+
|
|
12823
|
+
export type UpdatePluginConfigData = {
|
|
12824
|
+
body: UpdatePluginConfigRequest;
|
|
12825
|
+
path: {
|
|
12826
|
+
/**
|
|
12827
|
+
* Plugin ID
|
|
12828
|
+
*/
|
|
12829
|
+
id: string;
|
|
12830
|
+
};
|
|
12831
|
+
query?: never;
|
|
12832
|
+
url: '/api/v1/plugins/{id}/config';
|
|
12833
|
+
};
|
|
12834
|
+
|
|
12835
|
+
export type UpdatePluginConfigErrors = {
|
|
12836
|
+
/**
|
|
12837
|
+
* Admin privileges required
|
|
12838
|
+
*/
|
|
12839
|
+
403: unknown;
|
|
12840
|
+
/**
|
|
12841
|
+
* Plugin not found
|
|
12842
|
+
*/
|
|
12843
|
+
404: unknown;
|
|
12844
|
+
};
|
|
12845
|
+
|
|
12846
|
+
export type UpdatePluginConfigResponses = {
|
|
12847
|
+
/**
|
|
12848
|
+
* Plugin configuration updated
|
|
12849
|
+
*/
|
|
12850
|
+
200: PluginConfigResponse;
|
|
12851
|
+
};
|
|
12852
|
+
|
|
12853
|
+
export type UpdatePluginConfigResponse = UpdatePluginConfigResponses[keyof UpdatePluginConfigResponses];
|
|
12854
|
+
|
|
12855
|
+
export type DisablePluginData = {
|
|
12856
|
+
body?: never;
|
|
12857
|
+
path: {
|
|
12858
|
+
/**
|
|
12859
|
+
* Plugin ID
|
|
12860
|
+
*/
|
|
12861
|
+
id: string;
|
|
12862
|
+
};
|
|
12863
|
+
query?: never;
|
|
12864
|
+
url: '/api/v1/plugins/{id}/disable';
|
|
12865
|
+
};
|
|
12866
|
+
|
|
12867
|
+
export type DisablePluginErrors = {
|
|
12868
|
+
/**
|
|
12869
|
+
* Plugin not found
|
|
12870
|
+
*/
|
|
12871
|
+
404: unknown;
|
|
12872
|
+
};
|
|
12873
|
+
|
|
12874
|
+
export type DisablePluginResponses = {
|
|
12875
|
+
/**
|
|
12876
|
+
* Plugin disabled successfully
|
|
12877
|
+
*/
|
|
12878
|
+
200: unknown;
|
|
12879
|
+
};
|
|
12880
|
+
|
|
12881
|
+
export type EnablePluginData = {
|
|
12882
|
+
body?: never;
|
|
12883
|
+
path: {
|
|
12884
|
+
/**
|
|
12885
|
+
* Plugin ID
|
|
12886
|
+
*/
|
|
12887
|
+
id: string;
|
|
12888
|
+
};
|
|
12889
|
+
query?: never;
|
|
12890
|
+
url: '/api/v1/plugins/{id}/enable';
|
|
12891
|
+
};
|
|
12892
|
+
|
|
12893
|
+
export type EnablePluginErrors = {
|
|
12894
|
+
/**
|
|
12895
|
+
* Plugin not found
|
|
12896
|
+
*/
|
|
12897
|
+
404: unknown;
|
|
12898
|
+
};
|
|
12899
|
+
|
|
12900
|
+
export type EnablePluginResponses = {
|
|
12901
|
+
/**
|
|
12902
|
+
* Plugin enabled successfully
|
|
12903
|
+
*/
|
|
12904
|
+
200: unknown;
|
|
12905
|
+
};
|
|
12906
|
+
|
|
12907
|
+
export type GetPluginEventsData = {
|
|
12908
|
+
body?: never;
|
|
12909
|
+
path: {
|
|
12910
|
+
/**
|
|
12911
|
+
* Plugin ID
|
|
12912
|
+
*/
|
|
12913
|
+
id: string;
|
|
12914
|
+
};
|
|
12915
|
+
query?: {
|
|
12916
|
+
limit?: number | null;
|
|
12917
|
+
};
|
|
12918
|
+
url: '/api/v1/plugins/{id}/events';
|
|
12919
|
+
};
|
|
12920
|
+
|
|
12921
|
+
export type GetPluginEventsResponses = {
|
|
12922
|
+
/**
|
|
12923
|
+
* Plugin events
|
|
12924
|
+
*/
|
|
12925
|
+
200: Array<unknown>;
|
|
12926
|
+
};
|
|
12927
|
+
|
|
12928
|
+
export type GetPluginEventsResponse = GetPluginEventsResponses[keyof GetPluginEventsResponses];
|
|
12929
|
+
|
|
12930
|
+
export type ReloadPluginData = {
|
|
12931
|
+
body?: never;
|
|
12932
|
+
path: {
|
|
12933
|
+
/**
|
|
12934
|
+
* Plugin ID
|
|
12935
|
+
*/
|
|
12936
|
+
id: string;
|
|
12937
|
+
};
|
|
12938
|
+
query?: never;
|
|
12939
|
+
url: '/api/v1/plugins/{id}/reload';
|
|
12940
|
+
};
|
|
12941
|
+
|
|
12942
|
+
export type ReloadPluginResponses = {
|
|
12943
|
+
/**
|
|
12944
|
+
* Plugin reloaded successfully
|
|
12945
|
+
*/
|
|
12946
|
+
200: WasmPluginResponse;
|
|
12947
|
+
};
|
|
12948
|
+
|
|
12949
|
+
export type ReloadPluginResponse = ReloadPluginResponses[keyof ReloadPluginResponses];
|
|
12950
|
+
|
|
12951
|
+
export type ProjectsListData = {
|
|
12952
|
+
body?: never;
|
|
12953
|
+
path?: never;
|
|
12954
|
+
query?: never;
|
|
12955
|
+
url: '/api/v1/projects';
|
|
12956
|
+
};
|
|
12957
|
+
|
|
12958
|
+
export type ProjectsListErrors = {
|
|
12959
|
+
/**
|
|
12960
|
+
* Authentication required
|
|
12961
|
+
*/
|
|
12962
|
+
401: unknown;
|
|
12963
|
+
/**
|
|
12964
|
+
* Admin privileges required
|
|
12965
|
+
*/
|
|
12966
|
+
403: unknown;
|
|
12967
|
+
};
|
|
12968
|
+
|
|
12969
|
+
export type ProjectsListResponses = {
|
|
12970
|
+
/**
|
|
12971
|
+
* List of projects
|
|
12972
|
+
*/
|
|
12973
|
+
200: ProjectListResponse;
|
|
12974
|
+
};
|
|
12975
|
+
|
|
12976
|
+
export type ProjectsListResponse = ProjectsListResponses[keyof ProjectsListResponses];
|
|
12977
|
+
|
|
12978
|
+
export type ProjectsCreateData = {
|
|
12979
|
+
body: CreateProjectRequest;
|
|
12980
|
+
path?: never;
|
|
12981
|
+
query?: never;
|
|
12982
|
+
url: '/api/v1/projects';
|
|
12983
|
+
};
|
|
12984
|
+
|
|
12985
|
+
export type ProjectsCreateErrors = {
|
|
12986
|
+
/**
|
|
12987
|
+
* Authentication required
|
|
12988
|
+
*/
|
|
12989
|
+
401: unknown;
|
|
12990
|
+
/**
|
|
12991
|
+
* Admin privileges required
|
|
12992
|
+
*/
|
|
12993
|
+
403: unknown;
|
|
12994
|
+
/**
|
|
12995
|
+
* Project key already exists
|
|
12996
|
+
*/
|
|
12997
|
+
409: unknown;
|
|
12998
|
+
};
|
|
12999
|
+
|
|
13000
|
+
export type ProjectsCreateResponses = {
|
|
13001
|
+
/**
|
|
13002
|
+
* Project created
|
|
13003
|
+
*/
|
|
13004
|
+
200: Project;
|
|
13005
|
+
};
|
|
13006
|
+
|
|
13007
|
+
export type ProjectsCreateResponse = ProjectsCreateResponses[keyof ProjectsCreateResponses];
|
|
13008
|
+
|
|
13009
|
+
export type ProjectsDeleteData = {
|
|
13010
|
+
body?: never;
|
|
13011
|
+
path: {
|
|
13012
|
+
/**
|
|
13013
|
+
* Project ID
|
|
11527
13014
|
*/
|
|
11528
13015
|
id: string;
|
|
11529
13016
|
};
|
|
11530
13017
|
query?: never;
|
|
11531
|
-
url: '/api/v1/
|
|
13018
|
+
url: '/api/v1/projects/{id}';
|
|
11532
13019
|
};
|
|
11533
13020
|
|
|
11534
|
-
export type
|
|
13021
|
+
export type ProjectsDeleteErrors = {
|
|
11535
13022
|
/**
|
|
11536
|
-
*
|
|
13023
|
+
* Authentication required
|
|
13024
|
+
*/
|
|
13025
|
+
401: unknown;
|
|
13026
|
+
/**
|
|
13027
|
+
* Admin privileges required
|
|
13028
|
+
*/
|
|
13029
|
+
403: unknown;
|
|
13030
|
+
/**
|
|
13031
|
+
* Project not found
|
|
11537
13032
|
*/
|
|
11538
13033
|
404: unknown;
|
|
11539
13034
|
};
|
|
11540
13035
|
|
|
11541
|
-
export type
|
|
13036
|
+
export type ProjectsDeleteResponses = {
|
|
11542
13037
|
/**
|
|
11543
|
-
*
|
|
13038
|
+
* Project deleted
|
|
11544
13039
|
*/
|
|
11545
|
-
200:
|
|
13040
|
+
200: unknown;
|
|
11546
13041
|
};
|
|
11547
13042
|
|
|
11548
|
-
export type
|
|
11549
|
-
|
|
11550
|
-
export type GetPluginConfigData = {
|
|
13043
|
+
export type ProjectsGetData = {
|
|
11551
13044
|
body?: never;
|
|
11552
13045
|
path: {
|
|
11553
13046
|
/**
|
|
11554
|
-
*
|
|
13047
|
+
* Project ID
|
|
11555
13048
|
*/
|
|
11556
13049
|
id: string;
|
|
11557
13050
|
};
|
|
11558
13051
|
query?: never;
|
|
11559
|
-
url: '/api/v1/
|
|
13052
|
+
url: '/api/v1/projects/{id}';
|
|
11560
13053
|
};
|
|
11561
13054
|
|
|
11562
|
-
export type
|
|
13055
|
+
export type ProjectsGetErrors = {
|
|
11563
13056
|
/**
|
|
11564
|
-
*
|
|
13057
|
+
* Authentication required
|
|
13058
|
+
*/
|
|
13059
|
+
401: unknown;
|
|
13060
|
+
/**
|
|
13061
|
+
* Admin privileges required
|
|
13062
|
+
*/
|
|
13063
|
+
403: unknown;
|
|
13064
|
+
/**
|
|
13065
|
+
* Project not found
|
|
11565
13066
|
*/
|
|
11566
13067
|
404: unknown;
|
|
11567
13068
|
};
|
|
11568
13069
|
|
|
11569
|
-
export type
|
|
13070
|
+
export type ProjectsGetResponses = {
|
|
11570
13071
|
/**
|
|
11571
|
-
*
|
|
13072
|
+
* Project details
|
|
11572
13073
|
*/
|
|
11573
|
-
200:
|
|
13074
|
+
200: Project;
|
|
11574
13075
|
};
|
|
11575
13076
|
|
|
11576
|
-
export type
|
|
13077
|
+
export type ProjectsGetResponse = ProjectsGetResponses[keyof ProjectsGetResponses];
|
|
11577
13078
|
|
|
11578
|
-
export type
|
|
11579
|
-
body:
|
|
13079
|
+
export type ProjectsUpdateData = {
|
|
13080
|
+
body: UpdateProjectRequest;
|
|
11580
13081
|
path: {
|
|
11581
13082
|
/**
|
|
11582
|
-
*
|
|
13083
|
+
* Project ID
|
|
11583
13084
|
*/
|
|
11584
13085
|
id: string;
|
|
11585
13086
|
};
|
|
11586
13087
|
query?: never;
|
|
11587
|
-
url: '/api/v1/
|
|
13088
|
+
url: '/api/v1/projects/{id}';
|
|
11588
13089
|
};
|
|
11589
13090
|
|
|
11590
|
-
export type
|
|
13091
|
+
export type ProjectsUpdateErrors = {
|
|
11591
13092
|
/**
|
|
11592
|
-
*
|
|
13093
|
+
* Authentication required
|
|
13094
|
+
*/
|
|
13095
|
+
401: unknown;
|
|
13096
|
+
/**
|
|
13097
|
+
* Admin privileges required
|
|
13098
|
+
*/
|
|
13099
|
+
403: unknown;
|
|
13100
|
+
/**
|
|
13101
|
+
* Project not found
|
|
11593
13102
|
*/
|
|
11594
13103
|
404: unknown;
|
|
11595
13104
|
};
|
|
11596
13105
|
|
|
11597
|
-
export type
|
|
13106
|
+
export type ProjectsUpdateResponses = {
|
|
11598
13107
|
/**
|
|
11599
|
-
*
|
|
13108
|
+
* Project updated
|
|
11600
13109
|
*/
|
|
11601
|
-
200:
|
|
13110
|
+
200: Project;
|
|
11602
13111
|
};
|
|
11603
13112
|
|
|
11604
|
-
export type
|
|
13113
|
+
export type ProjectsUpdateResponse = ProjectsUpdateResponses[keyof ProjectsUpdateResponses];
|
|
11605
13114
|
|
|
11606
|
-
export type
|
|
11607
|
-
body
|
|
13115
|
+
export type ProjectsRemoveMemberData = {
|
|
13116
|
+
body: RemoveProjectMemberRequest;
|
|
11608
13117
|
path: {
|
|
11609
13118
|
/**
|
|
11610
|
-
*
|
|
13119
|
+
* Project ID
|
|
11611
13120
|
*/
|
|
11612
13121
|
id: string;
|
|
11613
13122
|
};
|
|
11614
13123
|
query?: never;
|
|
11615
|
-
url: '/api/v1/
|
|
13124
|
+
url: '/api/v1/projects/{id}/members';
|
|
11616
13125
|
};
|
|
11617
13126
|
|
|
11618
|
-
export type
|
|
13127
|
+
export type ProjectsRemoveMemberErrors = {
|
|
11619
13128
|
/**
|
|
11620
|
-
*
|
|
13129
|
+
* Authentication required
|
|
13130
|
+
*/
|
|
13131
|
+
401: unknown;
|
|
13132
|
+
/**
|
|
13133
|
+
* Admin privileges required
|
|
13134
|
+
*/
|
|
13135
|
+
403: unknown;
|
|
13136
|
+
/**
|
|
13137
|
+
* Grant not found
|
|
11621
13138
|
*/
|
|
11622
13139
|
404: unknown;
|
|
11623
13140
|
};
|
|
11624
13141
|
|
|
11625
|
-
export type
|
|
13142
|
+
export type ProjectsRemoveMemberResponses = {
|
|
11626
13143
|
/**
|
|
11627
|
-
*
|
|
13144
|
+
* Membership grant removed
|
|
11628
13145
|
*/
|
|
11629
13146
|
200: unknown;
|
|
11630
13147
|
};
|
|
11631
13148
|
|
|
11632
|
-
export type
|
|
13149
|
+
export type ProjectsListMembersData = {
|
|
11633
13150
|
body?: never;
|
|
11634
13151
|
path: {
|
|
11635
13152
|
/**
|
|
11636
|
-
*
|
|
13153
|
+
* Project ID
|
|
11637
13154
|
*/
|
|
11638
13155
|
id: string;
|
|
11639
13156
|
};
|
|
11640
13157
|
query?: never;
|
|
11641
|
-
url: '/api/v1/
|
|
13158
|
+
url: '/api/v1/projects/{id}/members';
|
|
11642
13159
|
};
|
|
11643
13160
|
|
|
11644
|
-
export type
|
|
13161
|
+
export type ProjectsListMembersErrors = {
|
|
11645
13162
|
/**
|
|
11646
|
-
*
|
|
13163
|
+
* Authentication required
|
|
13164
|
+
*/
|
|
13165
|
+
401: unknown;
|
|
13166
|
+
/**
|
|
13167
|
+
* Admin privileges required
|
|
13168
|
+
*/
|
|
13169
|
+
403: unknown;
|
|
13170
|
+
/**
|
|
13171
|
+
* Project not found
|
|
11647
13172
|
*/
|
|
11648
13173
|
404: unknown;
|
|
11649
13174
|
};
|
|
11650
13175
|
|
|
11651
|
-
export type
|
|
13176
|
+
export type ProjectsListMembersResponses = {
|
|
11652
13177
|
/**
|
|
11653
|
-
*
|
|
13178
|
+
* Project membership grants
|
|
11654
13179
|
*/
|
|
11655
|
-
200:
|
|
13180
|
+
200: ProjectMemberListResponse;
|
|
11656
13181
|
};
|
|
11657
13182
|
|
|
11658
|
-
export type
|
|
11659
|
-
|
|
13183
|
+
export type ProjectsListMembersResponse = ProjectsListMembersResponses[keyof ProjectsListMembersResponses];
|
|
13184
|
+
|
|
13185
|
+
export type ProjectsAddMemberData = {
|
|
13186
|
+
body: AddProjectMemberRequest;
|
|
11660
13187
|
path: {
|
|
11661
13188
|
/**
|
|
11662
|
-
*
|
|
13189
|
+
* Project ID
|
|
11663
13190
|
*/
|
|
11664
13191
|
id: string;
|
|
11665
13192
|
};
|
|
11666
|
-
query?:
|
|
11667
|
-
|
|
11668
|
-
};
|
|
11669
|
-
url: '/api/v1/plugins/{id}/events';
|
|
13193
|
+
query?: never;
|
|
13194
|
+
url: '/api/v1/projects/{id}/members';
|
|
11670
13195
|
};
|
|
11671
13196
|
|
|
11672
|
-
export type
|
|
13197
|
+
export type ProjectsAddMemberErrors = {
|
|
11673
13198
|
/**
|
|
11674
|
-
*
|
|
13199
|
+
* Authentication required
|
|
11675
13200
|
*/
|
|
11676
|
-
|
|
11677
|
-
|
|
11678
|
-
|
|
11679
|
-
|
|
11680
|
-
|
|
11681
|
-
|
|
11682
|
-
|
|
11683
|
-
|
|
11684
|
-
|
|
11685
|
-
* Plugin ID
|
|
11686
|
-
*/
|
|
11687
|
-
id: string;
|
|
11688
|
-
};
|
|
11689
|
-
query?: never;
|
|
11690
|
-
url: '/api/v1/plugins/{id}/reload';
|
|
13201
|
+
401: unknown;
|
|
13202
|
+
/**
|
|
13203
|
+
* Admin privileges required
|
|
13204
|
+
*/
|
|
13205
|
+
403: unknown;
|
|
13206
|
+
/**
|
|
13207
|
+
* Project not found
|
|
13208
|
+
*/
|
|
13209
|
+
404: unknown;
|
|
11691
13210
|
};
|
|
11692
13211
|
|
|
11693
|
-
export type
|
|
13212
|
+
export type ProjectsAddMemberResponses = {
|
|
11694
13213
|
/**
|
|
11695
|
-
*
|
|
13214
|
+
* Membership grant upserted
|
|
11696
13215
|
*/
|
|
11697
|
-
200:
|
|
13216
|
+
200: ProjectMemberRow;
|
|
11698
13217
|
};
|
|
11699
13218
|
|
|
11700
|
-
export type
|
|
13219
|
+
export type ProjectsAddMemberResponse = ProjectsAddMemberResponses[keyof ProjectsAddMemberResponses];
|
|
11701
13220
|
|
|
11702
13221
|
export type ListRulesData = {
|
|
11703
13222
|
body?: never;
|
|
@@ -12417,6 +13936,15 @@ export type GetHealthDashboardData = {
|
|
|
12417
13936
|
url: '/api/v1/quality/health/dashboard';
|
|
12418
13937
|
};
|
|
12419
13938
|
|
|
13939
|
+
export type GetHealthDashboardErrors = {
|
|
13940
|
+
/**
|
|
13941
|
+
* Admin privileges required
|
|
13942
|
+
*/
|
|
13943
|
+
403: ErrorResponse;
|
|
13944
|
+
};
|
|
13945
|
+
|
|
13946
|
+
export type GetHealthDashboardError = GetHealthDashboardErrors[keyof GetHealthDashboardErrors];
|
|
13947
|
+
|
|
12420
13948
|
export type GetHealthDashboardResponses = {
|
|
12421
13949
|
/**
|
|
12422
13950
|
* Health dashboard summary
|
|
@@ -12548,6 +14076,53 @@ export type GetQuarantineStatusResponses = {
|
|
|
12548
14076
|
|
|
12549
14077
|
export type GetQuarantineStatusResponse = GetQuarantineStatusResponses[keyof GetQuarantineStatusResponses];
|
|
12550
14078
|
|
|
14079
|
+
export type QuarantineArtifactNowData = {
|
|
14080
|
+
/**
|
|
14081
|
+
* Optional; empty body uses the default reason
|
|
14082
|
+
*/
|
|
14083
|
+
body: QuarantineNowRequest;
|
|
14084
|
+
path: {
|
|
14085
|
+
/**
|
|
14086
|
+
* Artifact ID
|
|
14087
|
+
*/
|
|
14088
|
+
artifact_id: string;
|
|
14089
|
+
};
|
|
14090
|
+
query?: never;
|
|
14091
|
+
url: '/api/v1/quarantine/{artifact_id}/quarantine';
|
|
14092
|
+
};
|
|
14093
|
+
|
|
14094
|
+
export type QuarantineArtifactNowErrors = {
|
|
14095
|
+
/**
|
|
14096
|
+
* Malformed request body
|
|
14097
|
+
*/
|
|
14098
|
+
400: unknown;
|
|
14099
|
+
/**
|
|
14100
|
+
* Authentication required
|
|
14101
|
+
*/
|
|
14102
|
+
401: unknown;
|
|
14103
|
+
/**
|
|
14104
|
+
* Admin access required
|
|
14105
|
+
*/
|
|
14106
|
+
403: unknown;
|
|
14107
|
+
/**
|
|
14108
|
+
* Artifact not found
|
|
14109
|
+
*/
|
|
14110
|
+
404: unknown;
|
|
14111
|
+
/**
|
|
14112
|
+
* Artifact was rejected during security review
|
|
14113
|
+
*/
|
|
14114
|
+
409: unknown;
|
|
14115
|
+
};
|
|
14116
|
+
|
|
14117
|
+
export type QuarantineArtifactNowResponses = {
|
|
14118
|
+
/**
|
|
14119
|
+
* Artifact quarantined
|
|
14120
|
+
*/
|
|
14121
|
+
200: QuarantineActionResponse;
|
|
14122
|
+
};
|
|
14123
|
+
|
|
14124
|
+
export type QuarantineArtifactNowResponse = QuarantineArtifactNowResponses[keyof QuarantineArtifactNowResponses];
|
|
14125
|
+
|
|
12551
14126
|
export type RejectQuarantinedArtifactData = {
|
|
12552
14127
|
body: RejectRequest;
|
|
12553
14128
|
path: {
|
|
@@ -12637,6 +14212,10 @@ export type ListRepositoriesData = {
|
|
|
12637
14212
|
format?: string | null;
|
|
12638
14213
|
type?: string | null;
|
|
12639
14214
|
q?: string | null;
|
|
14215
|
+
/**
|
|
14216
|
+
* Filter the listing to repositories assigned to this project (#2472).
|
|
14217
|
+
*/
|
|
14218
|
+
project?: string | null;
|
|
12640
14219
|
};
|
|
12641
14220
|
url: '/api/v1/repositories';
|
|
12642
14221
|
};
|
|
@@ -12839,6 +14418,23 @@ export type ListArtifactsData = {
|
|
|
12839
14418
|
* `docker_tags` array.
|
|
12840
14419
|
*/
|
|
12841
14420
|
group_by?: string | null;
|
|
14421
|
+
/**
|
|
14422
|
+
* Opaque keyset cursor (#2520, #2519, #2518). Pass the `next_cursor`
|
|
14423
|
+
* value from the previous response to fetch the next page; `page` is
|
|
14424
|
+
* ignored while a cursor is present. Supported by the flat artifact
|
|
14425
|
+
* listing of hosted/local, virtual, and remote repositories (#2518,
|
|
14426
|
+
* #2519), by `group_by=docker_tag`, and by `group_by=maven_component`
|
|
14427
|
+
* on remote repositories; other listing modes ignore it.
|
|
14428
|
+
*/
|
|
14429
|
+
cursor?: string | null;
|
|
14430
|
+
/**
|
|
14431
|
+
* Total-count mode for keyset-paged listings (#2520, #2519).
|
|
14432
|
+
* `count=exact` runs a dedicated COUNT query so `pagination.total` is
|
|
14433
|
+
* exact; otherwise the keyset-paged listings report a cheap lower bound
|
|
14434
|
+
* (rows seen so far, +1 when another page exists) and `has_more` is the
|
|
14435
|
+
* authoritative "is there a next page" signal.
|
|
14436
|
+
*/
|
|
14437
|
+
count?: string | null;
|
|
12842
14438
|
};
|
|
12843
14439
|
url: '/api/v1/repositories/{key}/artifacts';
|
|
12844
14440
|
};
|
|
@@ -13436,13 +15032,17 @@ export type UpdateVirtualMembersData = {
|
|
|
13436
15032
|
|
|
13437
15033
|
export type UpdateVirtualMembersErrors = {
|
|
13438
15034
|
/**
|
|
13439
|
-
* Repository is not virtual
|
|
15035
|
+
* Repository is not virtual, or a member is invalid
|
|
13440
15036
|
*/
|
|
13441
15037
|
400: unknown;
|
|
13442
15038
|
/**
|
|
13443
15039
|
* Authentication required
|
|
13444
15040
|
*/
|
|
13445
15041
|
401: unknown;
|
|
15042
|
+
/**
|
|
15043
|
+
* Insufficient permissions
|
|
15044
|
+
*/
|
|
15045
|
+
403: unknown;
|
|
13446
15046
|
/**
|
|
13447
15047
|
* Repository not found
|
|
13448
15048
|
*/
|
|
@@ -13451,7 +15051,7 @@ export type UpdateVirtualMembersErrors = {
|
|
|
13451
15051
|
|
|
13452
15052
|
export type UpdateVirtualMembersResponses = {
|
|
13453
15053
|
/**
|
|
13454
|
-
* Members
|
|
15054
|
+
* Members replaced with the supplied set
|
|
13455
15055
|
*/
|
|
13456
15056
|
200: VirtualMembersListResponse;
|
|
13457
15057
|
};
|
|
@@ -13858,6 +15458,78 @@ export type ListRepoScansResponses = {
|
|
|
13858
15458
|
|
|
13859
15459
|
export type ListRepoScansResponse = ListRepoScansResponses[keyof ListRepoScansResponses];
|
|
13860
15460
|
|
|
15461
|
+
export type GetRepositoryStorageData = {
|
|
15462
|
+
body?: never;
|
|
15463
|
+
path: {
|
|
15464
|
+
/**
|
|
15465
|
+
* Repository key
|
|
15466
|
+
*/
|
|
15467
|
+
key: string;
|
|
15468
|
+
};
|
|
15469
|
+
query?: never;
|
|
15470
|
+
url: '/api/v1/repositories/{key}/storage';
|
|
15471
|
+
};
|
|
15472
|
+
|
|
15473
|
+
export type GetRepositoryStorageErrors = {
|
|
15474
|
+
/**
|
|
15475
|
+
* Repository not found
|
|
15476
|
+
*/
|
|
15477
|
+
404: unknown;
|
|
15478
|
+
};
|
|
15479
|
+
|
|
15480
|
+
export type GetRepositoryStorageResponses = {
|
|
15481
|
+
/**
|
|
15482
|
+
* Deduplicated storage stats
|
|
15483
|
+
*/
|
|
15484
|
+
200: RepositoryStorageStatsResponse;
|
|
15485
|
+
};
|
|
15486
|
+
|
|
15487
|
+
export type GetRepositoryStorageResponse = GetRepositoryStorageResponses[keyof GetRepositoryStorageResponses];
|
|
15488
|
+
|
|
15489
|
+
export type GetRepositoryStorageTreeData = {
|
|
15490
|
+
body?: never;
|
|
15491
|
+
path: {
|
|
15492
|
+
/**
|
|
15493
|
+
* Repository key
|
|
15494
|
+
*/
|
|
15495
|
+
key: string;
|
|
15496
|
+
};
|
|
15497
|
+
query?: {
|
|
15498
|
+
/**
|
|
15499
|
+
* Folder prefix to root the listing at (`''`/absent = repository root).
|
|
15500
|
+
* Leading/trailing slashes are ignored.
|
|
15501
|
+
*/
|
|
15502
|
+
prefix?: string | null;
|
|
15503
|
+
/**
|
|
15504
|
+
* How many tree levels below `prefix` to return (default 1 = immediate
|
|
15505
|
+
* children, clamped to 1..=5).
|
|
15506
|
+
*/
|
|
15507
|
+
depth?: number | null;
|
|
15508
|
+
/**
|
|
15509
|
+
* Maximum number of descendant nodes returned (default 200, clamped to
|
|
15510
|
+
* 1..=1000). `truncated` is set when the limit cut the listing.
|
|
15511
|
+
*/
|
|
15512
|
+
limit?: number | null;
|
|
15513
|
+
};
|
|
15514
|
+
url: '/api/v1/repositories/{key}/storage/tree';
|
|
15515
|
+
};
|
|
15516
|
+
|
|
15517
|
+
export type GetRepositoryStorageTreeErrors = {
|
|
15518
|
+
/**
|
|
15519
|
+
* Repository not found
|
|
15520
|
+
*/
|
|
15521
|
+
404: unknown;
|
|
15522
|
+
};
|
|
15523
|
+
|
|
15524
|
+
export type GetRepositoryStorageTreeResponses = {
|
|
15525
|
+
/**
|
|
15526
|
+
* Per-prefix storage rollup
|
|
15527
|
+
*/
|
|
15528
|
+
200: RepositoryStorageTreeResponse;
|
|
15529
|
+
};
|
|
15530
|
+
|
|
15531
|
+
export type GetRepositoryStorageTreeResponse = GetRepositoryStorageTreeResponses[keyof GetRepositoryStorageTreeResponses];
|
|
15532
|
+
|
|
13861
15533
|
export type TestUpstreamData = {
|
|
13862
15534
|
body?: never;
|
|
13863
15535
|
path: {
|
|
@@ -15459,6 +17131,44 @@ export type SetupStatusResponses = {
|
|
|
15459
17131
|
|
|
15460
17132
|
export type SetupStatusResponse2 = SetupStatusResponses[keyof SetupStatusResponses];
|
|
15461
17133
|
|
|
17134
|
+
export type SignArtifactData = {
|
|
17135
|
+
body?: never;
|
|
17136
|
+
path: {
|
|
17137
|
+
/**
|
|
17138
|
+
* Artifact ID
|
|
17139
|
+
*/
|
|
17140
|
+
artifact_id: string;
|
|
17141
|
+
};
|
|
17142
|
+
query?: never;
|
|
17143
|
+
url: '/api/v1/signing/artifacts/{artifact_id}/sign';
|
|
17144
|
+
};
|
|
17145
|
+
|
|
17146
|
+
export type SignArtifactErrors = {
|
|
17147
|
+
/**
|
|
17148
|
+
* Admin privilege required
|
|
17149
|
+
*/
|
|
17150
|
+
403: ErrorResponse;
|
|
17151
|
+
/**
|
|
17152
|
+
* Artifact not found or not eligible for signing
|
|
17153
|
+
*/
|
|
17154
|
+
404: ErrorResponse;
|
|
17155
|
+
/**
|
|
17156
|
+
* Repository has no active signing key/config
|
|
17157
|
+
*/
|
|
17158
|
+
409: ErrorResponse;
|
|
17159
|
+
};
|
|
17160
|
+
|
|
17161
|
+
export type SignArtifactError = SignArtifactErrors[keyof SignArtifactErrors];
|
|
17162
|
+
|
|
17163
|
+
export type SignArtifactResponses = {
|
|
17164
|
+
/**
|
|
17165
|
+
* Artifact signed; attestation recorded
|
|
17166
|
+
*/
|
|
17167
|
+
200: SignArtifactResponse;
|
|
17168
|
+
};
|
|
17169
|
+
|
|
17170
|
+
export type SignArtifactResponse2 = SignArtifactResponses[keyof SignArtifactResponses];
|
|
17171
|
+
|
|
15462
17172
|
export type ListKeysData = {
|
|
15463
17173
|
body?: never;
|
|
15464
17174
|
path?: never;
|
|
@@ -17068,7 +18778,7 @@ export type RotateWebhookSecretErrors = {
|
|
|
17068
18778
|
|
|
17069
18779
|
export type RotateWebhookSecretResponses = {
|
|
17070
18780
|
/**
|
|
17071
|
-
* Secret rotated. Body
|
|
18781
|
+
* Secret rotated. Body reports success and metadata only; the raw secret is not returned.
|
|
17072
18782
|
*/
|
|
17073
18783
|
200: RotateWebhookSecretResponse;
|
|
17074
18784
|
};
|