@artifact-keeper/sdk 1.6.0 → 1.7.3
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 +94 -5
- package/src/types.gen.ts +754 -20
package/src/types.gen.ts
CHANGED
|
@@ -126,6 +126,10 @@ export type AffectedRepo = {
|
|
|
126
126
|
export type AgeGateConfigResponse = {
|
|
127
127
|
enabled: boolean;
|
|
128
128
|
min_age_days: number;
|
|
129
|
+
/**
|
|
130
|
+
* Age-source mode: `upstream_publish_time` or `first_seen` (#2264).
|
|
131
|
+
*/
|
|
132
|
+
mode: string;
|
|
129
133
|
repository_key: string;
|
|
130
134
|
};
|
|
131
135
|
|
|
@@ -303,7 +307,19 @@ export type ArtifactListResponse = {
|
|
|
303
307
|
* Docker tag grouping. Only present when `group_by=docker_tag`.
|
|
304
308
|
*/
|
|
305
309
|
docker_tags?: Array<DockerTagResponse> | null;
|
|
310
|
+
/**
|
|
311
|
+
* Whether another page exists after this one (#2520, #2518). Present on
|
|
312
|
+
* keyset-paged listings (flat and grouped); authoritative regardless of
|
|
313
|
+
* the `pagination.total` mode (exact vs lower bound).
|
|
314
|
+
*/
|
|
315
|
+
has_more?: boolean | null;
|
|
306
316
|
items: Array<ArtifactResponse>;
|
|
317
|
+
/**
|
|
318
|
+
* Opaque keyset cursor for the next page (#2520, #2518). Present on
|
|
319
|
+
* keyset-paged listings (flat and grouped) when another page exists;
|
|
320
|
+
* pass it back via `?cursor=`.
|
|
321
|
+
*/
|
|
322
|
+
next_cursor?: string | null;
|
|
307
323
|
pagination: Pagination;
|
|
308
324
|
};
|
|
309
325
|
|
|
@@ -353,6 +369,31 @@ export type ArtifactResponse = {
|
|
|
353
369
|
} | null;
|
|
354
370
|
name: string;
|
|
355
371
|
path: string;
|
|
372
|
+
/**
|
|
373
|
+
* Per-artifact quarantine state so a client/operator can tell which
|
|
374
|
+
* listed artifacts are held for security review (#2940). Always
|
|
375
|
+
* serialized so the listing never hides the control:
|
|
376
|
+
* - `"quarantined"` — held pending review; downloads return 409 (until
|
|
377
|
+
* any `quarantine_until` lapses),
|
|
378
|
+
* - `"rejected"` — terminally blocked by an admin,
|
|
379
|
+
* - a scan-lifecycle state (`"clean"`, `"flagged"`, `"unscanned"`,
|
|
380
|
+
* `"released"`),
|
|
381
|
+
* - `"not_quarantined"` — the explicit default when the row carries no
|
|
382
|
+
* quarantine state, so clients never have to treat a missing value as
|
|
383
|
+
* a state.
|
|
384
|
+
*
|
|
385
|
+
* The human-readable *reason* is intentionally NOT surfaced here: it is
|
|
386
|
+
* per-artifact security detail disclosed only by the authenticated,
|
|
387
|
+
* repository-visibility-checked `GET /api/v1/quarantine/{id}` (#2912),
|
|
388
|
+
* whereas this listing is reachable anonymously on public repositories.
|
|
389
|
+
*/
|
|
390
|
+
quarantine_status: string;
|
|
391
|
+
/**
|
|
392
|
+
* When a timed quarantine hold lapses and the artifact becomes
|
|
393
|
+
* downloadable again. `None` for a permanent (admin) quarantine and for
|
|
394
|
+
* artifacts that are not quarantined. (#2940)
|
|
395
|
+
*/
|
|
396
|
+
quarantine_until?: string | null;
|
|
356
397
|
repository_key: string;
|
|
357
398
|
/**
|
|
358
399
|
* Server-assigned revision number for repositories with first-class
|
|
@@ -496,6 +537,18 @@ export type AuthConfig = {
|
|
|
496
537
|
* Whether an LDAP directory is configured.
|
|
497
538
|
*/
|
|
498
539
|
ldap_enabled: boolean;
|
|
540
|
+
/**
|
|
541
|
+
* Whether the login UI should offer the local username/password form
|
|
542
|
+
* (issue #2621). `true` when no SSO provider is enabled; with SSO
|
|
543
|
+
* enabled it is `true` only when the operator explicitly opted in via
|
|
544
|
+
* `ALLOW_LOCAL_ADMIN_LOGIN=true` and has not enforced strict SSO-only
|
|
545
|
+
* via `SSO_DISABLE_ADMIN_BREAK_GLASS`. Display-only: the login endpoint
|
|
546
|
+
* independently enforces the same policy server-side
|
|
547
|
+
* (`api::handlers::auth::local_login_gate`), so this flag never grants
|
|
548
|
+
* access by itself. LDAP is separate — the UI shows the credentials form
|
|
549
|
+
* for enabled LDAP providers regardless of this flag.
|
|
550
|
+
*/
|
|
551
|
+
local_login_enabled: boolean;
|
|
499
552
|
/**
|
|
500
553
|
* Whether an OIDC provider is configured.
|
|
501
554
|
*/
|
|
@@ -1023,7 +1076,40 @@ export type CreateApiTokenResponse = {
|
|
|
1023
1076
|
};
|
|
1024
1077
|
|
|
1025
1078
|
export type CreateBackupRequest = {
|
|
1079
|
+
/**
|
|
1080
|
+
* Repository ids to exclude from a full or incremental backup (#2772).
|
|
1081
|
+
*
|
|
1082
|
+
* Airgapped or bandwidth-limited deployments use this to keep specific
|
|
1083
|
+
* repositories out of the backup. When omitted or empty nothing is
|
|
1084
|
+
* excluded, so existing behavior is unchanged. If `repository_ids` is
|
|
1085
|
+
* also supplied the excluded ids are removed from that include list;
|
|
1086
|
+
* otherwise every repository except the excluded ones is backed up.
|
|
1087
|
+
*/
|
|
1088
|
+
exclude_repositories?: Array<string> | null;
|
|
1089
|
+
/**
|
|
1090
|
+
* Optional custom name/label for the backup archive (#2790).
|
|
1091
|
+
*
|
|
1092
|
+
* When provided it becomes the identifying part of the archive
|
|
1093
|
+
* filename. Restricted to letters, digits, `.`, `_`, and `-`; when
|
|
1094
|
+
* omitted the archive keeps its default `{uuid}` name.
|
|
1095
|
+
*/
|
|
1096
|
+
name?: string | null;
|
|
1097
|
+
/**
|
|
1098
|
+
* Explicit allow-list of repository ids to include in the backup.
|
|
1099
|
+
*
|
|
1100
|
+
* When omitted every repository is backed up (subject to
|
|
1101
|
+
* `exclude_repositories`).
|
|
1102
|
+
*/
|
|
1026
1103
|
repository_ids?: Array<string> | null;
|
|
1104
|
+
/**
|
|
1105
|
+
* Optional RFC3339 lower bound on artifact modification time (#2789).
|
|
1106
|
+
*
|
|
1107
|
+
* When set, the (typically incremental) backup includes only artifacts
|
|
1108
|
+
* whose `updated_at` is at or after this timestamp, capturing just the
|
|
1109
|
+
* changes made from the given date/time to now. When omitted every
|
|
1110
|
+
* artifact is included, so backup behavior is unchanged.
|
|
1111
|
+
*/
|
|
1112
|
+
since?: string | null;
|
|
1027
1113
|
type?: string | null;
|
|
1028
1114
|
};
|
|
1029
1115
|
|
|
@@ -1122,11 +1208,24 @@ export type CreateLdapConfigRequest = {
|
|
|
1122
1208
|
admin_group_dn?: string | null;
|
|
1123
1209
|
bind_dn?: string | null;
|
|
1124
1210
|
bind_password?: string | null;
|
|
1211
|
+
/**
|
|
1212
|
+
* Inline PEM CA certificate/chain to trust for this provider's LDAPS/
|
|
1213
|
+
* STARTTLS handshake (migration 174, #2782). Send an empty string to
|
|
1214
|
+
* clear a previously stored certificate.
|
|
1215
|
+
*/
|
|
1216
|
+
ca_certificate?: string | null;
|
|
1125
1217
|
display_name_attribute?: string | null;
|
|
1126
1218
|
email_attribute?: string | null;
|
|
1127
1219
|
group_base_dn?: string | null;
|
|
1128
1220
|
group_filter?: string | null;
|
|
1129
1221
|
groups_attribute?: string | null;
|
|
1222
|
+
/**
|
|
1223
|
+
* Opt-in (migration 174, #2782): skip TLS certificate verification for
|
|
1224
|
+
* this provider's LDAPS/STARTTLS handshake. Defaults false
|
|
1225
|
+
* (secure-by-default). Only enable for trusted networks / private CAs
|
|
1226
|
+
* you cannot import.
|
|
1227
|
+
*/
|
|
1228
|
+
insecure_skip_verify?: boolean | null;
|
|
1130
1229
|
is_enabled?: boolean | null;
|
|
1131
1230
|
name: string;
|
|
1132
1231
|
priority?: number | null;
|
|
@@ -1285,6 +1384,14 @@ export type CreateRepositoryRequest = {
|
|
|
1285
1384
|
* Stored in `repository_config` under `apt_release_version`.
|
|
1286
1385
|
*/
|
|
1287
1386
|
apt_release_version?: string | null;
|
|
1387
|
+
/**
|
|
1388
|
+
* Opt into ingesting UNVERIFIED upstream metadata on the keyless RPM
|
|
1389
|
+
* curation-sync path (#2569). Omit or `false` to keep the fail-closed
|
|
1390
|
+
* default (a keyless curation sync refuses to ingest unverified upstream
|
|
1391
|
+
* packages); `true` reverts to the legacy unverified-ingest behavior. Only
|
|
1392
|
+
* meaningful for RPM curation staging repositories.
|
|
1393
|
+
*/
|
|
1394
|
+
curation_allow_unverified?: boolean | null;
|
|
1288
1395
|
/**
|
|
1289
1396
|
* Custom User-Agent sent on outbound HTTP requests to the upstream for
|
|
1290
1397
|
* this repository. Only valid for remote repositories. Max 256 characters.
|
|
@@ -1626,28 +1733,42 @@ export type CreateWebhookRequest = {
|
|
|
1626
1733
|
export type CreatedGroupRow = {
|
|
1627
1734
|
created_at: string;
|
|
1628
1735
|
description?: string | null;
|
|
1736
|
+
external_source?: string | null;
|
|
1629
1737
|
id: string;
|
|
1630
1738
|
name: string;
|
|
1631
1739
|
updated_at: string;
|
|
1632
1740
|
};
|
|
1633
1741
|
|
|
1634
|
-
export type CreatedPermissionRow = {
|
|
1635
|
-
actions: Array<string>;
|
|
1636
|
-
created_at: string;
|
|
1637
|
-
id: string;
|
|
1638
|
-
principal_id: string;
|
|
1639
|
-
principal_type: string;
|
|
1640
|
-
target_id: string;
|
|
1641
|
-
target_type: string;
|
|
1642
|
-
updated_at: string;
|
|
1643
|
-
};
|
|
1644
|
-
|
|
1645
1742
|
export type CurationCreateRuleRequest = {
|
|
1646
1743
|
action: string;
|
|
1647
1744
|
architecture?: string;
|
|
1648
|
-
|
|
1745
|
+
/**
|
|
1746
|
+
* Engine-specific parameters (JSON object). `{}` for `pattern` rules.
|
|
1747
|
+
*/
|
|
1748
|
+
config?: {
|
|
1749
|
+
[key: string]: unknown;
|
|
1750
|
+
};
|
|
1751
|
+
/**
|
|
1752
|
+
* Only meaningful for `rule_type = "pattern"`; defaults to `*` so typed
|
|
1753
|
+
* rules (`publisher_trust`, `popularity`) can omit it.
|
|
1754
|
+
*/
|
|
1755
|
+
package_pattern?: string;
|
|
1649
1756
|
priority?: number;
|
|
1650
1757
|
reason: string;
|
|
1758
|
+
/**
|
|
1759
|
+
* Evaluation engine: `pattern` (default), `publisher_trust`, `popularity`.
|
|
1760
|
+
*/
|
|
1761
|
+
rule_type?: string;
|
|
1762
|
+
/**
|
|
1763
|
+
* `repository` (default when `staging_repo_id` is set) or `global`.
|
|
1764
|
+
* When present it must be consistent with `staging_repo_id`: `global`
|
|
1765
|
+
* forbids a repo id, `repository` requires one.
|
|
1766
|
+
*/
|
|
1767
|
+
scope?: string | null;
|
|
1768
|
+
/**
|
|
1769
|
+
* Omit (with `scope: "global"` or no `scope`) to create an instance-wide
|
|
1770
|
+
* baseline rule; set to attach the rule to one staging repository.
|
|
1771
|
+
*/
|
|
1651
1772
|
staging_repo_id?: string | null;
|
|
1652
1773
|
version_constraint?: string;
|
|
1653
1774
|
};
|
|
@@ -1677,10 +1798,20 @@ export type CurationPackageResponse = {
|
|
|
1677
1798
|
export type CurationUpdateRuleRequest = {
|
|
1678
1799
|
action: string;
|
|
1679
1800
|
architecture?: string;
|
|
1801
|
+
/**
|
|
1802
|
+
* Engine-specific parameters (JSON object). `{}` for `pattern` rules.
|
|
1803
|
+
*/
|
|
1804
|
+
config?: {
|
|
1805
|
+
[key: string]: unknown;
|
|
1806
|
+
};
|
|
1680
1807
|
enabled?: boolean;
|
|
1681
1808
|
package_pattern: string;
|
|
1682
1809
|
priority?: number;
|
|
1683
1810
|
reason: string;
|
|
1811
|
+
/**
|
|
1812
|
+
* Evaluation engine: `pattern` (default), `publisher_trust`, `popularity`.
|
|
1813
|
+
*/
|
|
1814
|
+
rule_type?: string;
|
|
1684
1815
|
version_constraint?: string;
|
|
1685
1816
|
};
|
|
1686
1817
|
|
|
@@ -1807,6 +1938,7 @@ export type DbPoolStats = {
|
|
|
1807
1938
|
* the default when none exists yet.
|
|
1808
1939
|
*/
|
|
1809
1940
|
export type DebianConfigPatch = {
|
|
1941
|
+
allow_encoded_separators?: boolean | null;
|
|
1810
1942
|
architectures?: Array<string> | null;
|
|
1811
1943
|
components?: Array<string> | null;
|
|
1812
1944
|
distribution_paths?: Array<string> | null;
|
|
@@ -1846,6 +1978,15 @@ export type DebianPackageFetchStrategy = 'upstream_passthrough' | 'eager';
|
|
|
1846
1978
|
* permitted regardless of the `architectures` allowlist.
|
|
1847
1979
|
*/
|
|
1848
1980
|
export type DebianRepositoryConfig = {
|
|
1981
|
+
/**
|
|
1982
|
+
* Defense-in-depth (#2562): when `false` (the default) a proxy request
|
|
1983
|
+
* whose path carries a percent-encoded path separator (`%2f` = `/`,
|
|
1984
|
+
* `%5c` = `\`, at any decode layer) is rejected with 400 before any
|
|
1985
|
+
* upstream fetch. APT never percent-encodes path separators, so this only
|
|
1986
|
+
* ever blocks path-confusion/traversal probes; set it `true` to opt out
|
|
1987
|
+
* for a nonstandard upstream that genuinely requires encoded separators.
|
|
1988
|
+
*/
|
|
1989
|
+
allow_encoded_separators?: boolean;
|
|
1849
1990
|
/**
|
|
1850
1991
|
* Architectures (e.g. `amd64`, `arm64`) to proxy. Empty/`["*"]` = all.
|
|
1851
1992
|
* `all` (arch-independent) is always permitted.
|
|
@@ -2029,6 +2170,13 @@ export type DownloadRecord = {
|
|
|
2029
2170
|
export type DownloadTrend = {
|
|
2030
2171
|
date: string;
|
|
2031
2172
|
download_count: number;
|
|
2173
|
+
/**
|
|
2174
|
+
* Proxy-served (pull-through) downloads for the day, from the sibling
|
|
2175
|
+
* `proxy_download_statistics` table (#2537/#2704). Additive: hosted
|
|
2176
|
+
* serves stay in `download_count` unchanged; defaults to 0 when
|
|
2177
|
+
* deserializing older payloads.
|
|
2178
|
+
*/
|
|
2179
|
+
proxy_download_count?: number;
|
|
2032
2180
|
};
|
|
2033
2181
|
|
|
2034
2182
|
/**
|
|
@@ -2476,6 +2624,10 @@ export type GroupMemberResponse = {
|
|
|
2476
2624
|
export type GroupResponse = {
|
|
2477
2625
|
created_at: string;
|
|
2478
2626
|
description?: string | null;
|
|
2627
|
+
/**
|
|
2628
|
+
* See [`GroupRow::external_source`]; lets the frontend disable member editing for SSO groups.
|
|
2629
|
+
*/
|
|
2630
|
+
external_source?: string | null;
|
|
2479
2631
|
id: string;
|
|
2480
2632
|
member_count: number;
|
|
2481
2633
|
name: string;
|
|
@@ -2485,6 +2637,10 @@ export type GroupResponse = {
|
|
|
2485
2637
|
export type GroupRow = {
|
|
2486
2638
|
created_at: string;
|
|
2487
2639
|
description?: string | null;
|
|
2640
|
+
/**
|
|
2641
|
+
* SSO provider owning the group (`oidc`/`saml`/`ldap`); `None` for local groups. IdP owns membership (#2874).
|
|
2642
|
+
*/
|
|
2643
|
+
external_source?: string | null;
|
|
2488
2644
|
id: string;
|
|
2489
2645
|
member_count: number;
|
|
2490
2646
|
name: string;
|
|
@@ -2493,6 +2649,18 @@ export type GroupRow = {
|
|
|
2493
2649
|
|
|
2494
2650
|
/**
|
|
2495
2651
|
* Growth summary for a time range.
|
|
2652
|
+
*
|
|
2653
|
+
* Computed from `storage_metrics` daily snapshots. **Accounting-basis note
|
|
2654
|
+
* (#3249):** snapshots taken before the #3134/#3249 fix summed
|
|
2655
|
+
* `artifacts.size_bytes` only, missing OCI layer/config blob bytes
|
|
2656
|
+
* (`oci_blobs`) and proxy-cached bytes (`proxy_cache_artifacts`) while
|
|
2657
|
+
* counting legacy backfilled `proxy-cache/%` rows. Those historical rows are
|
|
2658
|
+
* deliberately left as recorded — the source tables hold no history, so past
|
|
2659
|
+
* values cannot be recomputed, only fabricated. A growth series that spans
|
|
2660
|
+
* the fix date therefore shows a one-day upward step in
|
|
2661
|
+
* `storage_bytes_start/end` / `storage_growth_bytes` /
|
|
2662
|
+
* `storage_growth_percent` when the corrected accounting first lands; it is
|
|
2663
|
+
* a measurement correction, not real growth.
|
|
2496
2664
|
*/
|
|
2497
2665
|
export type GrowthSummary = {
|
|
2498
2666
|
artifacts_added: number;
|
|
@@ -2643,7 +2811,20 @@ export type LdapConfigResponse = {
|
|
|
2643
2811
|
group_filter?: string | null;
|
|
2644
2812
|
groups_attribute: string;
|
|
2645
2813
|
has_bind_password: boolean;
|
|
2814
|
+
/**
|
|
2815
|
+
* Whether a custom inline CA certificate is configured for this provider
|
|
2816
|
+
* (migration 174, #2782). The PEM itself is not returned.
|
|
2817
|
+
*/
|
|
2818
|
+
has_ca_certificate: boolean;
|
|
2646
2819
|
id: string;
|
|
2820
|
+
/**
|
|
2821
|
+
* Opt-in flag (migration 174, #2782): when true, TLS certificate
|
|
2822
|
+
* verification is skipped for this provider's LDAPS/STARTTLS handshake.
|
|
2823
|
+
* Defaults false (secure-by-default). Matches Harbor's "insecure skip
|
|
2824
|
+
* verify"; only enable for trusted networks / private CAs you cannot
|
|
2825
|
+
* import.
|
|
2826
|
+
*/
|
|
2827
|
+
insecure_skip_verify: boolean;
|
|
2647
2828
|
is_enabled: boolean;
|
|
2648
2829
|
name: string;
|
|
2649
2830
|
priority: number;
|
|
@@ -2711,6 +2892,23 @@ export type LifecyclePolicy = {
|
|
|
2711
2892
|
};
|
|
2712
2893
|
|
|
2713
2894
|
export type ListArtifactsQuery = {
|
|
2895
|
+
/**
|
|
2896
|
+
* Total-count mode for keyset-paged listings (#2520, #2519).
|
|
2897
|
+
* `count=exact` runs a dedicated COUNT query so `pagination.total` is
|
|
2898
|
+
* exact; otherwise the keyset-paged listings report a cheap lower bound
|
|
2899
|
+
* (rows seen so far, +1 when another page exists) and `has_more` is the
|
|
2900
|
+
* authoritative "is there a next page" signal.
|
|
2901
|
+
*/
|
|
2902
|
+
count?: string | null;
|
|
2903
|
+
/**
|
|
2904
|
+
* Opaque keyset cursor (#2520, #2519, #2518). Pass the `next_cursor`
|
|
2905
|
+
* value from the previous response to fetch the next page; `page` is
|
|
2906
|
+
* ignored while a cursor is present. Supported by the flat artifact
|
|
2907
|
+
* listing of hosted/local, virtual, and remote repositories (#2518,
|
|
2908
|
+
* #2519), by `group_by=docker_tag`, and by `group_by=maven_component`
|
|
2909
|
+
* on remote repositories; other listing modes ignore it.
|
|
2910
|
+
*/
|
|
2911
|
+
cursor?: string | null;
|
|
2714
2912
|
/**
|
|
2715
2913
|
* Server-side artifact grouping.
|
|
2716
2914
|
*
|
|
@@ -3715,9 +3913,23 @@ export type QuarantineActionResponse = {
|
|
|
3715
3913
|
new_status: string;
|
|
3716
3914
|
};
|
|
3717
3915
|
|
|
3916
|
+
export type QuarantineNowRequest = {
|
|
3917
|
+
/**
|
|
3918
|
+
* Reason shown to developers whose downloads are blocked.
|
|
3919
|
+
*/
|
|
3920
|
+
reason?: string | null;
|
|
3921
|
+
};
|
|
3922
|
+
|
|
3718
3923
|
export type QuarantineStatusResponse = {
|
|
3719
3924
|
artifact_id: string;
|
|
3720
3925
|
is_blocked: boolean;
|
|
3926
|
+
/**
|
|
3927
|
+
* Why the artifact is held, when one was recorded by a scan policy or an
|
|
3928
|
+
* admin. This is the only surface that discloses the reason: blocked
|
|
3929
|
+
* downloads return a generic message because they are reachable
|
|
3930
|
+
* anonymously on public repositories (#2912).
|
|
3931
|
+
*/
|
|
3932
|
+
quarantine_reason?: string | null;
|
|
3721
3933
|
quarantine_status?: string | null;
|
|
3722
3934
|
quarantine_until?: string | null;
|
|
3723
3935
|
};
|
|
@@ -3920,6 +4132,19 @@ export type RepositoryResponse = {
|
|
|
3920
4132
|
*/
|
|
3921
4133
|
apt_release_version?: string | null;
|
|
3922
4134
|
created_at: string;
|
|
4135
|
+
/**
|
|
4136
|
+
* Stance applied when no curation rule matches: `allow` or `review`.
|
|
4137
|
+
*/
|
|
4138
|
+
curation_default_action: string;
|
|
4139
|
+
/**
|
|
4140
|
+
* Whether curation rules are enforced for this repository (#2912).
|
|
4141
|
+
*
|
|
4142
|
+
* Echoed back because this flag now *blocks downloads* on the PyPI proxy
|
|
4143
|
+
* paths, and a security control that cannot be read back is the same class of
|
|
4144
|
+
* problem as one that is stored but not enforced. Stored on the repositories
|
|
4145
|
+
* row, so unlike `quarantine_enabled` this needs no separate lookup.
|
|
4146
|
+
*/
|
|
4147
|
+
curation_enabled: boolean;
|
|
3923
4148
|
/**
|
|
3924
4149
|
* Custom User-Agent used for outbound HTTP requests to the upstream,
|
|
3925
4150
|
* read back from `repository_config`. `None` when unset.
|
|
@@ -4024,6 +4249,15 @@ export type RepositoryStorageBreakdown = {
|
|
|
4024
4249
|
download_count: number;
|
|
4025
4250
|
format: string;
|
|
4026
4251
|
last_upload_at?: string | null;
|
|
4252
|
+
/**
|
|
4253
|
+
* Downloads served by this repository's remote pull-through proxy
|
|
4254
|
+
* (`proxy_download_statistics`, #2537/#2704). Proxy-cached objects carry
|
|
4255
|
+
* no `artifacts` row (#1280), so these serves are counted in a sibling
|
|
4256
|
+
* table and were previously not readable through any API. Kept separate
|
|
4257
|
+
* from `download_count` (hosted serves) so existing consumers are
|
|
4258
|
+
* unaffected; defaults to 0 when deserializing older payloads.
|
|
4259
|
+
*/
|
|
4260
|
+
proxy_download_count?: number;
|
|
4027
4261
|
repository_id: string;
|
|
4028
4262
|
repository_key: string;
|
|
4029
4263
|
repository_name: string;
|
|
@@ -4107,6 +4341,52 @@ export type RepositoryStorageStatsResponse = {
|
|
|
4107
4341
|
unique_bytes?: number | null;
|
|
4108
4342
|
};
|
|
4109
4343
|
|
|
4344
|
+
/**
|
|
4345
|
+
* Per-prefix (folder tree) storage rollup response (#2601).
|
|
4346
|
+
*
|
|
4347
|
+
* All figures are read from the materialized `repository_path_storage_stats`
|
|
4348
|
+
* cache (refreshed on the storage-stats schedule + post-GC) — a tree call is
|
|
4349
|
+
* an index scan over pre-aggregated rows, never a walk of the artifact table.
|
|
4350
|
+
*
|
|
4351
|
+
* Every figure is within-repository only (references this repo holds), so
|
|
4352
|
+
* unlike the repo-level endpoint's cross-tenant-derivable dedup breakdown
|
|
4353
|
+
* (#2560) nothing here needs an admin restriction beyond repo visibility.
|
|
4354
|
+
*/
|
|
4355
|
+
export type RepositoryStorageTreeResponse = {
|
|
4356
|
+
/**
|
|
4357
|
+
* Descendant folder nodes, up to `depth` levels below `node`, largest
|
|
4358
|
+
* `logical_bytes` first.
|
|
4359
|
+
*/
|
|
4360
|
+
children: Array<StorageTreeNode>;
|
|
4361
|
+
/**
|
|
4362
|
+
* When the rollup was last recomputed. `null` before the first refresh.
|
|
4363
|
+
*/
|
|
4364
|
+
computed_at?: string | null;
|
|
4365
|
+
/**
|
|
4366
|
+
* Folder levels below the root that are individually materialized;
|
|
4367
|
+
* deeper files roll up into their ancestor at this depth.
|
|
4368
|
+
*/
|
|
4369
|
+
max_materialized_depth: number;
|
|
4370
|
+
/**
|
|
4371
|
+
* The node the listing is rooted at (zeros when the prefix has no
|
|
4372
|
+
* materialized data — unknown folder or refresher not yet run).
|
|
4373
|
+
*/
|
|
4374
|
+
node: StorageTreeNode;
|
|
4375
|
+
repository_key: string;
|
|
4376
|
+
/**
|
|
4377
|
+
* True when `limit` cut the descendant listing.
|
|
4378
|
+
*/
|
|
4379
|
+
truncated: boolean;
|
|
4380
|
+
/**
|
|
4381
|
+
* Bytes referenced by this repository that carry no logical path and so
|
|
4382
|
+
* cannot be placed in the tree (today: OCI layer blobs; the blob→image
|
|
4383
|
+
* edge lives only in manifest content). Root-level figure; present only
|
|
4384
|
+
* when the request is rooted at `''`. `node.logical_bytes +
|
|
4385
|
+
* unattributed_bytes` reconciles with the repo-level logical total.
|
|
4386
|
+
*/
|
|
4387
|
+
unattributed_bytes?: number | null;
|
|
4388
|
+
};
|
|
4389
|
+
|
|
4110
4390
|
export type RescanForInventoryRequest = {
|
|
4111
4391
|
/**
|
|
4112
4392
|
* Maximum number of artifacts to enqueue in this call. Operators
|
|
@@ -4187,6 +4467,12 @@ export type RoleResponse = {
|
|
|
4187
4467
|
|
|
4188
4468
|
/**
|
|
4189
4469
|
* Response returned by the rotate-secret endpoint.
|
|
4470
|
+
*
|
|
4471
|
+
* GHSA-qcmj: the raw signing secret is intentionally NOT returned here. A
|
|
4472
|
+
* rotation only reports success and non-reversible metadata (the display
|
|
4473
|
+
* `secret_digest` and the previous-secret expiry); the new raw secret is
|
|
4474
|
+
* retained only in encrypted form and delivered/consumed out-of-band, so it
|
|
4475
|
+
* cannot be disclosed via this response body or logs.
|
|
4190
4476
|
*/
|
|
4191
4477
|
export type RotateWebhookSecretResponse = {
|
|
4192
4478
|
id: string;
|
|
@@ -4195,9 +4481,8 @@ export type RotateWebhookSecretResponse = {
|
|
|
4195
4481
|
*/
|
|
4196
4482
|
previous_secret_expires_at: string;
|
|
4197
4483
|
/**
|
|
4198
|
-
*
|
|
4484
|
+
* Short, non-reversible identifier for the newly active signing secret.
|
|
4199
4485
|
*/
|
|
4200
|
-
secret: string;
|
|
4201
4486
|
secret_digest: string;
|
|
4202
4487
|
};
|
|
4203
4488
|
|
|
@@ -4232,6 +4517,9 @@ export type RuleEvaluationResponse = {
|
|
|
4232
4517
|
export type RuleResponse = {
|
|
4233
4518
|
action: string;
|
|
4234
4519
|
architecture: string;
|
|
4520
|
+
config: {
|
|
4521
|
+
[key: string]: unknown;
|
|
4522
|
+
};
|
|
4235
4523
|
created_at: string;
|
|
4236
4524
|
created_by?: string | null;
|
|
4237
4525
|
enabled: boolean;
|
|
@@ -4239,6 +4527,8 @@ export type RuleResponse = {
|
|
|
4239
4527
|
package_pattern: string;
|
|
4240
4528
|
priority: number;
|
|
4241
4529
|
reason: string;
|
|
4530
|
+
rule_type: string;
|
|
4531
|
+
scope: string;
|
|
4242
4532
|
staging_repo_id?: string | null;
|
|
4243
4533
|
updated_at: string;
|
|
4244
4534
|
version_constraint: string;
|
|
@@ -4314,13 +4604,26 @@ export type SbomResponse = {
|
|
|
4314
4604
|
};
|
|
4315
4605
|
|
|
4316
4606
|
export type ScanConfigResponse = {
|
|
4607
|
+
/**
|
|
4608
|
+
* Persisted and returned, but not currently consulted by any enforcement
|
|
4609
|
+
* gate — blocking is configured via scan policies instead (#3144/#3246).
|
|
4610
|
+
*/
|
|
4317
4611
|
block_on_policy_violation: boolean;
|
|
4318
4612
|
created_at: string;
|
|
4319
4613
|
id: string;
|
|
4614
|
+
/**
|
|
4615
|
+
* #2954: fail-open (default) / fail-closed action for the inline proxy
|
|
4616
|
+
* scan-on-fetch.
|
|
4617
|
+
*/
|
|
4618
|
+
proxy_scan_action: string;
|
|
4320
4619
|
repository_id: string;
|
|
4321
4620
|
scan_enabled: boolean;
|
|
4322
4621
|
scan_on_proxy: boolean;
|
|
4323
4622
|
scan_on_upload: boolean;
|
|
4623
|
+
/**
|
|
4624
|
+
* Persisted and returned, but not currently consulted by any enforcement
|
|
4625
|
+
* gate (#3243).
|
|
4626
|
+
*/
|
|
4324
4627
|
severity_threshold: string;
|
|
4325
4628
|
updated_at: string;
|
|
4326
4629
|
};
|
|
@@ -4553,6 +4856,13 @@ export type SetRoutingRulesRequest = {
|
|
|
4553
4856
|
* Response body for the setup status endpoint.
|
|
4554
4857
|
*/
|
|
4555
4858
|
export type SetupStatusResponse = {
|
|
4859
|
+
/**
|
|
4860
|
+
* Optional deployment-aware instruction for retrieving the generated
|
|
4861
|
+
* initial admin password, sourced from the `SETUP_PASSWORD_HINT` env var.
|
|
4862
|
+
* Present only when an operator has configured it; when absent, the web UI
|
|
4863
|
+
* falls back to its built-in Docker Compose instruction (#2802).
|
|
4864
|
+
*/
|
|
4865
|
+
setup_password_hint?: string | null;
|
|
4556
4866
|
/**
|
|
4557
4867
|
* Whether the initial admin password change is still required.
|
|
4558
4868
|
*/
|
|
@@ -4718,13 +5028,87 @@ export type StorageGcResult = {
|
|
|
4718
5028
|
*/
|
|
4719
5029
|
export type StorageSnapshot = {
|
|
4720
5030
|
snapshot_date: string;
|
|
5031
|
+
/**
|
|
5032
|
+
* Rows in `artifacts` (for OCI repositories that is manifests only —
|
|
5033
|
+
* layer/config blobs are content-addressed objects, not artifacts), the
|
|
5034
|
+
* same deliberate decision as the dashboard's
|
|
5035
|
+
* `SystemStats::total_artifacts` (#3134). Unlike the byte total, this
|
|
5036
|
+
* count still includes legacy backfilled `proxy-cache/%` rows.
|
|
5037
|
+
*/
|
|
4721
5038
|
total_artifacts: number;
|
|
4722
5039
|
total_downloads: number;
|
|
4723
5040
|
total_repositories: number;
|
|
5041
|
+
/**
|
|
5042
|
+
* All stored bytes at snapshot time, summed from
|
|
5043
|
+
* `repository_usage_ledger` (`hosted_bytes + proxy_bytes + oci_bytes`) —
|
|
5044
|
+
* the same source as the dashboard `total_storage_bytes` and quota
|
|
5045
|
+
* admission (#3134/#3249), so the analytics series is consistent with
|
|
5046
|
+
* both by construction. Includes OCI layer/config blob bytes
|
|
5047
|
+
* (`oci_blobs`) and proxy-cached bytes (`proxy_cache_artifacts`);
|
|
5048
|
+
* excludes legacy backfilled `proxy-cache/%` `artifacts` rows (their
|
|
5049
|
+
* bytes are represented by the proxy-cache catalog instead). This is the
|
|
5050
|
+
* LOGICAL figure: a blob cross-repo-mounted into N repositories counts
|
|
5051
|
+
* once per repository, matching the per-repo storage column and quota.
|
|
5052
|
+
*/
|
|
4724
5053
|
total_storage_bytes: number;
|
|
4725
5054
|
total_users: number;
|
|
4726
5055
|
};
|
|
4727
5056
|
|
|
5057
|
+
/**
|
|
5058
|
+
* One folder node in the per-prefix storage rollup (#2601).
|
|
5059
|
+
*/
|
|
5060
|
+
export type StorageTreeNode = {
|
|
5061
|
+
/**
|
|
5062
|
+
* Distinct physical objects under this prefix.
|
|
5063
|
+
*/
|
|
5064
|
+
blob_count: number;
|
|
5065
|
+
/**
|
|
5066
|
+
* Number of path segments in `prefix` (0 = root).
|
|
5067
|
+
*/
|
|
5068
|
+
depth: number;
|
|
5069
|
+
/**
|
|
5070
|
+
* References (artifact/proxy-cache rows) under this prefix.
|
|
5071
|
+
*/
|
|
5072
|
+
file_count: number;
|
|
5073
|
+
/**
|
|
5074
|
+
* Sum over every artifact/proxy-cache reference under this prefix.
|
|
5075
|
+
*/
|
|
5076
|
+
logical_bytes: number;
|
|
5077
|
+
/**
|
|
5078
|
+
* Deduplicated within this repository: each distinct physical object
|
|
5079
|
+
* under the prefix counted once. Because an object shared by two sibling
|
|
5080
|
+
* subtrees counts once in each but once at their common ancestor, the sum
|
|
5081
|
+
* of children's `physical_bytes` can exceed the parent's — the difference
|
|
5082
|
+
* is the cross-subtree dedup saving.
|
|
5083
|
+
*/
|
|
5084
|
+
physical_bytes: number;
|
|
5085
|
+
/**
|
|
5086
|
+
* Canonical prefix (no leading/trailing `/`; `''` = repository root).
|
|
5087
|
+
*/
|
|
5088
|
+
prefix: string;
|
|
5089
|
+
};
|
|
5090
|
+
|
|
5091
|
+
/**
|
|
5092
|
+
* Query parameters for the per-prefix storage tree (#2601).
|
|
5093
|
+
*/
|
|
5094
|
+
export type StorageTreeQuery = {
|
|
5095
|
+
/**
|
|
5096
|
+
* How many tree levels below `prefix` to return (default 1 = immediate
|
|
5097
|
+
* children, clamped to 1..=5).
|
|
5098
|
+
*/
|
|
5099
|
+
depth?: number | null;
|
|
5100
|
+
/**
|
|
5101
|
+
* Maximum number of descendant nodes returned (default 200, clamped to
|
|
5102
|
+
* 1..=1000). `truncated` is set when the limit cut the listing.
|
|
5103
|
+
*/
|
|
5104
|
+
limit?: number | null;
|
|
5105
|
+
/**
|
|
5106
|
+
* Folder prefix to root the listing at (`''`/absent = repository root).
|
|
5107
|
+
* Leading/trailing slashes are ignored.
|
|
5108
|
+
*/
|
|
5109
|
+
prefix?: string | null;
|
|
5110
|
+
};
|
|
5111
|
+
|
|
4728
5112
|
export type SubmitCrashesRequest = {
|
|
4729
5113
|
ids: Array<string>;
|
|
4730
5114
|
};
|
|
@@ -4916,9 +5300,31 @@ export type SystemSettings = {
|
|
|
4916
5300
|
export type SystemStats = {
|
|
4917
5301
|
active_peers: number;
|
|
4918
5302
|
pending_sync_tasks: number;
|
|
5303
|
+
/**
|
|
5304
|
+
* Proxy-cached (pull-through) objects, tracked in `proxy_cache_artifacts`
|
|
5305
|
+
* rather than `artifacts`. Since #3134 the byte figure is a breakdown of
|
|
5306
|
+
* `total_storage_bytes` (do not add the two).
|
|
5307
|
+
*/
|
|
5308
|
+
proxy_artifact_count: number;
|
|
5309
|
+
proxy_storage_bytes: number;
|
|
5310
|
+
/**
|
|
5311
|
+
* Rows in `artifacts` (for OCI repositories that is manifests only —
|
|
5312
|
+
* layer/config blobs are content-addressed objects, not artifacts).
|
|
5313
|
+
* Unlike the byte total, this count still includes legacy backfilled
|
|
5314
|
+
* `proxy-cache/%` rows.
|
|
5315
|
+
*/
|
|
4919
5316
|
total_artifacts: number;
|
|
4920
5317
|
total_downloads: number;
|
|
4921
5318
|
total_repositories: number;
|
|
5319
|
+
/**
|
|
5320
|
+
* All stored bytes, summed from `repository_usage_ledger`
|
|
5321
|
+
* (`hosted_bytes + proxy_bytes + oci_bytes`) — the same source the
|
|
5322
|
+
* per-repository `storage_used_bytes` figures are read from, so the
|
|
5323
|
+
* dashboard total is consistent with the per-repo column by
|
|
5324
|
+
* construction (#3134). Includes OCI layer/config blob bytes
|
|
5325
|
+
* (`oci_blobs`) and proxy-cached bytes; `proxy_storage_bytes` below is
|
|
5326
|
+
* a *breakdown* of this total, not a disjoint bucket.
|
|
5327
|
+
*/
|
|
4922
5328
|
total_storage_bytes: number;
|
|
4923
5329
|
total_users: number;
|
|
4924
5330
|
};
|
|
@@ -5140,6 +5546,11 @@ export type UninstallQuery = {
|
|
|
5140
5546
|
export type UpdateAgeGateConfigRequest = {
|
|
5141
5547
|
enabled: boolean;
|
|
5142
5548
|
min_age_days: number;
|
|
5549
|
+
/**
|
|
5550
|
+
* Age-source mode. Omitted = keep the repository's current mode, so
|
|
5551
|
+
* pre-mode clients that PUT `{enabled, min_age_days}` stay valid.
|
|
5552
|
+
*/
|
|
5553
|
+
mode?: string | null;
|
|
5143
5554
|
};
|
|
5144
5555
|
|
|
5145
5556
|
export type UpdateAnalysisBody = {
|
|
@@ -5204,11 +5615,21 @@ export type UpdateLdapConfigRequest = {
|
|
|
5204
5615
|
admin_group_dn?: string | null;
|
|
5205
5616
|
bind_dn?: string | null;
|
|
5206
5617
|
bind_password?: string | null;
|
|
5618
|
+
/**
|
|
5619
|
+
* Inline PEM CA certificate/chain (migration 174, #2782). Omit to leave
|
|
5620
|
+
* unchanged; send an empty string to clear.
|
|
5621
|
+
*/
|
|
5622
|
+
ca_certificate?: string | null;
|
|
5207
5623
|
display_name_attribute?: string | null;
|
|
5208
5624
|
email_attribute?: string | null;
|
|
5209
5625
|
group_base_dn?: string | null;
|
|
5210
5626
|
group_filter?: string | null;
|
|
5211
5627
|
groups_attribute?: string | null;
|
|
5628
|
+
/**
|
|
5629
|
+
* See `CreateLdapConfigRequest::insecure_skip_verify` (migration 174,
|
|
5630
|
+
* #2782). Omit to leave the stored value unchanged.
|
|
5631
|
+
*/
|
|
5632
|
+
insecure_skip_verify?: boolean | null;
|
|
5212
5633
|
is_enabled?: boolean | null;
|
|
5213
5634
|
name?: string | null;
|
|
5214
5635
|
priority?: number | null;
|
|
@@ -5336,6 +5757,26 @@ export type UpdateRepositoryRequest = {
|
|
|
5336
5757
|
* Stored in `repository_config` under `apt_release_version`.
|
|
5337
5758
|
*/
|
|
5338
5759
|
apt_release_version?: string | null;
|
|
5760
|
+
/**
|
|
5761
|
+
* Update the keyless-sync unverified-ingest opt-in (#2569). When provided,
|
|
5762
|
+
* sets `curation_allow_unverified` (`false` restores the fail-closed
|
|
5763
|
+
* default; `true` opts into legacy unverified ingest). Omit to leave it
|
|
5764
|
+
* unchanged.
|
|
5765
|
+
*/
|
|
5766
|
+
curation_allow_unverified?: boolean | null;
|
|
5767
|
+
/**
|
|
5768
|
+
* Default curation action when no rule matches: allow or review.
|
|
5769
|
+
* "block" is rejected (DB CHECK, migration 071); use block rules for
|
|
5770
|
+
* specific packages instead.
|
|
5771
|
+
*
|
|
5772
|
+
* The allowed set is spelled out in the schema so a generated SDK presents it
|
|
5773
|
+
* rather than an unconstrained string.
|
|
5774
|
+
*/
|
|
5775
|
+
curation_default_action: string;
|
|
5776
|
+
/**
|
|
5777
|
+
* Enable curation-rule enforcement on this repository's proxy paths.
|
|
5778
|
+
*/
|
|
5779
|
+
curation_enabled?: boolean | null;
|
|
5339
5780
|
/**
|
|
5340
5781
|
* Update the custom User-Agent for outbound HTTP requests to the upstream.
|
|
5341
5782
|
* Only valid for remote repositories. Pass an empty string to remove.
|
|
@@ -5490,7 +5931,22 @@ export type UpdateUserRequest = {
|
|
|
5490
5931
|
is_admin?: boolean | null;
|
|
5491
5932
|
};
|
|
5492
5933
|
|
|
5934
|
+
/**
|
|
5935
|
+
* Full-set replace of a virtual repository's members (PR #2795, issue #2785;
|
|
5936
|
+
* ratified in issue #2899).
|
|
5937
|
+
*
|
|
5938
|
+
* This body is the COMPLETE desired member list, not a partial patch. Any
|
|
5939
|
+
* current member whose key is absent from `members` is removed; keys present
|
|
5940
|
+
* are inserted or have their priority updated. An empty `members` array
|
|
5941
|
+
* removes every member.
|
|
5942
|
+
*
|
|
5943
|
+
* WARNING: sending a partial list to reorder priorities deletes the omitted
|
|
5944
|
+
* members. Clients must always send the full member list.
|
|
5945
|
+
*/
|
|
5493
5946
|
export type UpdateVirtualMembersRequest = {
|
|
5947
|
+
/**
|
|
5948
|
+
* The complete desired member set. Members not listed here are removed.
|
|
5949
|
+
*/
|
|
5494
5950
|
members: Array<VirtualMemberPriority>;
|
|
5495
5951
|
};
|
|
5496
5952
|
|
|
@@ -5521,10 +5977,22 @@ export type UpsertLicensePolicyRequest = {
|
|
|
5521
5977
|
* and an omitted field is never clobbered. See #1374 / B11.
|
|
5522
5978
|
*/
|
|
5523
5979
|
export type UpsertScanConfigRequest = {
|
|
5980
|
+
/**
|
|
5981
|
+
* Accepted and persisted, but consulted by no gate — enforcement is the
|
|
5982
|
+
* `scan_policies` table's job (#3144; disposition tracked in #3246).
|
|
5983
|
+
*/
|
|
5524
5984
|
block_on_policy_violation?: boolean | null;
|
|
5985
|
+
/**
|
|
5986
|
+
* #2954: `'fail_open'` (default) | `'fail_closed'` for the inline proxy
|
|
5987
|
+
* scan-on-fetch action.
|
|
5988
|
+
*/
|
|
5989
|
+
proxy_scan_action?: string | null;
|
|
5525
5990
|
scan_enabled?: boolean | null;
|
|
5526
5991
|
scan_on_proxy?: boolean | null;
|
|
5527
5992
|
scan_on_upload?: boolean | null;
|
|
5993
|
+
/**
|
|
5994
|
+
* Accepted and persisted, but consulted by no production gate (#3243).
|
|
5995
|
+
*/
|
|
5528
5996
|
severity_threshold?: string | null;
|
|
5529
5997
|
};
|
|
5530
5998
|
|
|
@@ -5557,8 +6025,33 @@ export type UserResponse = {
|
|
|
5557
6025
|
username: string;
|
|
5558
6026
|
};
|
|
5559
6027
|
|
|
6028
|
+
export type VersionResponse = {
|
|
6029
|
+
/**
|
|
6030
|
+
* The number of approved packages frozen into the snapshot.
|
|
6031
|
+
*/
|
|
6032
|
+
package_count: number;
|
|
6033
|
+
/**
|
|
6034
|
+
* Whether this version's signed repodata has been published yet.
|
|
6035
|
+
*/
|
|
6036
|
+
published: boolean;
|
|
6037
|
+
/**
|
|
6038
|
+
* The repository key the version belongs to.
|
|
6039
|
+
*/
|
|
6040
|
+
repository: string;
|
|
6041
|
+
/**
|
|
6042
|
+
* The monotonic snapshot number (published/served under `/rpm/{key}/@N/`).
|
|
6043
|
+
*/
|
|
6044
|
+
version_number: number;
|
|
6045
|
+
};
|
|
6046
|
+
|
|
5560
6047
|
export type VirtualMemberPriority = {
|
|
6048
|
+
/**
|
|
6049
|
+
* Key of the member repository. Inserted if it is not already a member.
|
|
6050
|
+
*/
|
|
5561
6051
|
member_key: string;
|
|
6052
|
+
/**
|
|
6053
|
+
* Resolution priority. Lower values are searched first.
|
|
6054
|
+
*/
|
|
5562
6055
|
priority: number;
|
|
5563
6056
|
};
|
|
5564
6057
|
|
|
@@ -5607,7 +6100,7 @@ export type WasmPluginResponse = {
|
|
|
5607
6100
|
/**
|
|
5608
6101
|
* Webhook event types
|
|
5609
6102
|
*/
|
|
5610
|
-
export type WebhookEvent = 'artifact_uploaded' | 'artifact_deleted' | 'repository_created' | 'repository_deleted' | 'user_created' | 'user_deleted' | 'build_started' | 'build_completed' | 'build_failed' | 'age_gate_queued' | 'age_gate_approved' | 'age_gate_rejected';
|
|
6103
|
+
export type WebhookEvent = 'artifact_uploaded' | 'artifact_deleted' | 'repository_created' | 'repository_deleted' | 'user_created' | 'user_deleted' | 'build_started' | 'build_completed' | 'build_failed' | 'age_gate_queued' | 'age_gate_approved' | 'age_gate_rejected' | 'age_gate_reopened';
|
|
5611
6104
|
|
|
5612
6105
|
export type WebhookListResponse = {
|
|
5613
6106
|
items: Array<WebhookResponse>;
|
|
@@ -5729,6 +6222,21 @@ export type RejectReviewResponses = {
|
|
|
5729
6222
|
|
|
5730
6223
|
export type RejectReviewResponse = RejectReviewResponses[keyof RejectReviewResponses];
|
|
5731
6224
|
|
|
6225
|
+
export type ReopenReviewData = {
|
|
6226
|
+
body: ReviewActionRequest;
|
|
6227
|
+
path: {
|
|
6228
|
+
id: string;
|
|
6229
|
+
};
|
|
6230
|
+
query?: never;
|
|
6231
|
+
url: '/api/v1/admin/age-gate/reviews/{id}/reopen';
|
|
6232
|
+
};
|
|
6233
|
+
|
|
6234
|
+
export type ReopenReviewResponses = {
|
|
6235
|
+
200: AgeGateReviewResponse;
|
|
6236
|
+
};
|
|
6237
|
+
|
|
6238
|
+
export type ReopenReviewResponse = ReopenReviewResponses[keyof ReopenReviewResponses];
|
|
6239
|
+
|
|
5732
6240
|
export type GetStaleArtifactsData = {
|
|
5733
6241
|
body?: never;
|
|
5734
6242
|
path?: never;
|
|
@@ -6087,14 +6595,18 @@ export type ExecuteBackupErrors = {
|
|
|
6087
6595
|
*/
|
|
6088
6596
|
404: unknown;
|
|
6089
6597
|
/**
|
|
6090
|
-
*
|
|
6598
|
+
* Another backup is already in progress
|
|
6599
|
+
*/
|
|
6600
|
+
409: unknown;
|
|
6601
|
+
/**
|
|
6602
|
+
* The run could not be started or its outcome could not be recorded
|
|
6091
6603
|
*/
|
|
6092
6604
|
500: unknown;
|
|
6093
6605
|
};
|
|
6094
6606
|
|
|
6095
6607
|
export type ExecuteBackupResponses = {
|
|
6096
6608
|
/**
|
|
6097
|
-
* Backup
|
|
6609
|
+
* Backup run finished; `status` is `completed` or `failed` and `error_message` carries the cause of a failure
|
|
6098
6610
|
*/
|
|
6099
6611
|
200: BackupResponse;
|
|
6100
6612
|
};
|
|
@@ -9458,6 +9970,80 @@ export type TriggerCurationSyncResponses = {
|
|
|
9458
9970
|
|
|
9459
9971
|
export type TriggerCurationSyncResponse = TriggerCurationSyncResponses[keyof TriggerCurationSyncResponses];
|
|
9460
9972
|
|
|
9973
|
+
export type CreateCurationVersionData = {
|
|
9974
|
+
body?: never;
|
|
9975
|
+
path: {
|
|
9976
|
+
/**
|
|
9977
|
+
* Staging repository key
|
|
9978
|
+
*/
|
|
9979
|
+
repo_key: string;
|
|
9980
|
+
};
|
|
9981
|
+
query?: never;
|
|
9982
|
+
url: '/api/v1/curation/repos/{repo_key}/versions';
|
|
9983
|
+
};
|
|
9984
|
+
|
|
9985
|
+
export type CreateCurationVersionErrors = {
|
|
9986
|
+
/**
|
|
9987
|
+
* No approved packages / packages need re-sync
|
|
9988
|
+
*/
|
|
9989
|
+
400: unknown;
|
|
9990
|
+
/**
|
|
9991
|
+
* Not authorized for this repo
|
|
9992
|
+
*/
|
|
9993
|
+
403: unknown;
|
|
9994
|
+
/**
|
|
9995
|
+
* Repository not found
|
|
9996
|
+
*/
|
|
9997
|
+
404: unknown;
|
|
9998
|
+
};
|
|
9999
|
+
|
|
10000
|
+
export type CreateCurationVersionResponses = {
|
|
10001
|
+
201: VersionResponse;
|
|
10002
|
+
};
|
|
10003
|
+
|
|
10004
|
+
export type CreateCurationVersionResponse = CreateCurationVersionResponses[keyof CreateCurationVersionResponses];
|
|
10005
|
+
|
|
10006
|
+
export type PublishCurationVersionData = {
|
|
10007
|
+
body?: never;
|
|
10008
|
+
path: {
|
|
10009
|
+
/**
|
|
10010
|
+
* Staging repository key
|
|
10011
|
+
*/
|
|
10012
|
+
repo_key: string;
|
|
10013
|
+
/**
|
|
10014
|
+
* Version number to publish
|
|
10015
|
+
*/
|
|
10016
|
+
n: number;
|
|
10017
|
+
};
|
|
10018
|
+
query?: never;
|
|
10019
|
+
url: '/api/v1/curation/repos/{repo_key}/versions/{n}/publish';
|
|
10020
|
+
};
|
|
10021
|
+
|
|
10022
|
+
export type PublishCurationVersionErrors = {
|
|
10023
|
+
/**
|
|
10024
|
+
* Empty version / missing snippet / no signing key
|
|
10025
|
+
*/
|
|
10026
|
+
400: unknown;
|
|
10027
|
+
/**
|
|
10028
|
+
* Not authorized for this repo
|
|
10029
|
+
*/
|
|
10030
|
+
403: unknown;
|
|
10031
|
+
/**
|
|
10032
|
+
* Repository or version not found
|
|
10033
|
+
*/
|
|
10034
|
+
404: unknown;
|
|
10035
|
+
/**
|
|
10036
|
+
* Version already published (immutable)
|
|
10037
|
+
*/
|
|
10038
|
+
409: unknown;
|
|
10039
|
+
};
|
|
10040
|
+
|
|
10041
|
+
export type PublishCurationVersionResponses = {
|
|
10042
|
+
200: VersionResponse;
|
|
10043
|
+
};
|
|
10044
|
+
|
|
10045
|
+
export type PublishCurationVersionResponse = PublishCurationVersionResponses[keyof PublishCurationVersionResponses];
|
|
10046
|
+
|
|
9461
10047
|
export type ListCurationRulesData = {
|
|
9462
10048
|
body?: never;
|
|
9463
10049
|
path?: never;
|
|
@@ -9466,6 +10052,10 @@ export type ListCurationRulesData = {
|
|
|
9466
10052
|
* Filter by staging repo
|
|
9467
10053
|
*/
|
|
9468
10054
|
staging_repo_id?: string;
|
|
10055
|
+
/**
|
|
10056
|
+
* Filter by rule scope: `global` lists only the instance-wide baseline rules (admin-only)
|
|
10057
|
+
*/
|
|
10058
|
+
scope?: string;
|
|
9469
10059
|
};
|
|
9470
10060
|
url: '/api/v1/curation/rules';
|
|
9471
10061
|
};
|
|
@@ -13577,6 +14167,53 @@ export type GetQuarantineStatusResponses = {
|
|
|
13577
14167
|
|
|
13578
14168
|
export type GetQuarantineStatusResponse = GetQuarantineStatusResponses[keyof GetQuarantineStatusResponses];
|
|
13579
14169
|
|
|
14170
|
+
export type QuarantineArtifactNowData = {
|
|
14171
|
+
/**
|
|
14172
|
+
* Optional; empty body uses the default reason
|
|
14173
|
+
*/
|
|
14174
|
+
body: QuarantineNowRequest;
|
|
14175
|
+
path: {
|
|
14176
|
+
/**
|
|
14177
|
+
* Artifact ID
|
|
14178
|
+
*/
|
|
14179
|
+
artifact_id: string;
|
|
14180
|
+
};
|
|
14181
|
+
query?: never;
|
|
14182
|
+
url: '/api/v1/quarantine/{artifact_id}/quarantine';
|
|
14183
|
+
};
|
|
14184
|
+
|
|
14185
|
+
export type QuarantineArtifactNowErrors = {
|
|
14186
|
+
/**
|
|
14187
|
+
* Malformed request body
|
|
14188
|
+
*/
|
|
14189
|
+
400: unknown;
|
|
14190
|
+
/**
|
|
14191
|
+
* Authentication required
|
|
14192
|
+
*/
|
|
14193
|
+
401: unknown;
|
|
14194
|
+
/**
|
|
14195
|
+
* Admin access required
|
|
14196
|
+
*/
|
|
14197
|
+
403: unknown;
|
|
14198
|
+
/**
|
|
14199
|
+
* Artifact not found
|
|
14200
|
+
*/
|
|
14201
|
+
404: unknown;
|
|
14202
|
+
/**
|
|
14203
|
+
* Artifact was rejected during security review
|
|
14204
|
+
*/
|
|
14205
|
+
409: unknown;
|
|
14206
|
+
};
|
|
14207
|
+
|
|
14208
|
+
export type QuarantineArtifactNowResponses = {
|
|
14209
|
+
/**
|
|
14210
|
+
* Artifact quarantined
|
|
14211
|
+
*/
|
|
14212
|
+
200: QuarantineActionResponse;
|
|
14213
|
+
};
|
|
14214
|
+
|
|
14215
|
+
export type QuarantineArtifactNowResponse = QuarantineArtifactNowResponses[keyof QuarantineArtifactNowResponses];
|
|
14216
|
+
|
|
13580
14217
|
export type RejectQuarantinedArtifactData = {
|
|
13581
14218
|
body: RejectRequest;
|
|
13582
14219
|
path: {
|
|
@@ -13872,6 +14509,23 @@ export type ListArtifactsData = {
|
|
|
13872
14509
|
* `docker_tags` array.
|
|
13873
14510
|
*/
|
|
13874
14511
|
group_by?: string | null;
|
|
14512
|
+
/**
|
|
14513
|
+
* Opaque keyset cursor (#2520, #2519, #2518). Pass the `next_cursor`
|
|
14514
|
+
* value from the previous response to fetch the next page; `page` is
|
|
14515
|
+
* ignored while a cursor is present. Supported by the flat artifact
|
|
14516
|
+
* listing of hosted/local, virtual, and remote repositories (#2518,
|
|
14517
|
+
* #2519), by `group_by=docker_tag`, and by `group_by=maven_component`
|
|
14518
|
+
* on remote repositories; other listing modes ignore it.
|
|
14519
|
+
*/
|
|
14520
|
+
cursor?: string | null;
|
|
14521
|
+
/**
|
|
14522
|
+
* Total-count mode for keyset-paged listings (#2520, #2519).
|
|
14523
|
+
* `count=exact` runs a dedicated COUNT query so `pagination.total` is
|
|
14524
|
+
* exact; otherwise the keyset-paged listings report a cheap lower bound
|
|
14525
|
+
* (rows seen so far, +1 when another page exists) and `has_more` is the
|
|
14526
|
+
* authoritative "is there a next page" signal.
|
|
14527
|
+
*/
|
|
14528
|
+
count?: string | null;
|
|
13875
14529
|
};
|
|
13876
14530
|
url: '/api/v1/repositories/{key}/artifacts';
|
|
13877
14531
|
};
|
|
@@ -14469,13 +15123,17 @@ export type UpdateVirtualMembersData = {
|
|
|
14469
15123
|
|
|
14470
15124
|
export type UpdateVirtualMembersErrors = {
|
|
14471
15125
|
/**
|
|
14472
|
-
* Repository is not virtual
|
|
15126
|
+
* Repository is not virtual, or a member is invalid
|
|
14473
15127
|
*/
|
|
14474
15128
|
400: unknown;
|
|
14475
15129
|
/**
|
|
14476
15130
|
* Authentication required
|
|
14477
15131
|
*/
|
|
14478
15132
|
401: unknown;
|
|
15133
|
+
/**
|
|
15134
|
+
* Insufficient permissions
|
|
15135
|
+
*/
|
|
15136
|
+
403: unknown;
|
|
14479
15137
|
/**
|
|
14480
15138
|
* Repository not found
|
|
14481
15139
|
*/
|
|
@@ -14484,7 +15142,7 @@ export type UpdateVirtualMembersErrors = {
|
|
|
14484
15142
|
|
|
14485
15143
|
export type UpdateVirtualMembersResponses = {
|
|
14486
15144
|
/**
|
|
14487
|
-
* Members
|
|
15145
|
+
* Members replaced with the supplied set
|
|
14488
15146
|
*/
|
|
14489
15147
|
200: VirtualMembersListResponse;
|
|
14490
15148
|
};
|
|
@@ -14919,6 +15577,82 @@ export type GetRepositoryStorageResponses = {
|
|
|
14919
15577
|
|
|
14920
15578
|
export type GetRepositoryStorageResponse = GetRepositoryStorageResponses[keyof GetRepositoryStorageResponses];
|
|
14921
15579
|
|
|
15580
|
+
export type RunRepositoryStorageGcData = {
|
|
15581
|
+
body: StorageGcRequest;
|
|
15582
|
+
path: {
|
|
15583
|
+
/**
|
|
15584
|
+
* Repository key
|
|
15585
|
+
*/
|
|
15586
|
+
key: string;
|
|
15587
|
+
};
|
|
15588
|
+
query?: never;
|
|
15589
|
+
url: '/api/v1/repositories/{key}/storage-gc';
|
|
15590
|
+
};
|
|
15591
|
+
|
|
15592
|
+
export type RunRepositoryStorageGcErrors = {
|
|
15593
|
+
/**
|
|
15594
|
+
* Authentication required, or admin privileges required
|
|
15595
|
+
*/
|
|
15596
|
+
401: unknown;
|
|
15597
|
+
/**
|
|
15598
|
+
* Repository not found
|
|
15599
|
+
*/
|
|
15600
|
+
404: unknown;
|
|
15601
|
+
};
|
|
15602
|
+
|
|
15603
|
+
export type RunRepositoryStorageGcResponses = {
|
|
15604
|
+
/**
|
|
15605
|
+
* GC result
|
|
15606
|
+
*/
|
|
15607
|
+
200: StorageGcResult;
|
|
15608
|
+
};
|
|
15609
|
+
|
|
15610
|
+
export type RunRepositoryStorageGcResponse = RunRepositoryStorageGcResponses[keyof RunRepositoryStorageGcResponses];
|
|
15611
|
+
|
|
15612
|
+
export type GetRepositoryStorageTreeData = {
|
|
15613
|
+
body?: never;
|
|
15614
|
+
path: {
|
|
15615
|
+
/**
|
|
15616
|
+
* Repository key
|
|
15617
|
+
*/
|
|
15618
|
+
key: string;
|
|
15619
|
+
};
|
|
15620
|
+
query?: {
|
|
15621
|
+
/**
|
|
15622
|
+
* Folder prefix to root the listing at (`''`/absent = repository root).
|
|
15623
|
+
* Leading/trailing slashes are ignored.
|
|
15624
|
+
*/
|
|
15625
|
+
prefix?: string | null;
|
|
15626
|
+
/**
|
|
15627
|
+
* How many tree levels below `prefix` to return (default 1 = immediate
|
|
15628
|
+
* children, clamped to 1..=5).
|
|
15629
|
+
*/
|
|
15630
|
+
depth?: number | null;
|
|
15631
|
+
/**
|
|
15632
|
+
* Maximum number of descendant nodes returned (default 200, clamped to
|
|
15633
|
+
* 1..=1000). `truncated` is set when the limit cut the listing.
|
|
15634
|
+
*/
|
|
15635
|
+
limit?: number | null;
|
|
15636
|
+
};
|
|
15637
|
+
url: '/api/v1/repositories/{key}/storage/tree';
|
|
15638
|
+
};
|
|
15639
|
+
|
|
15640
|
+
export type GetRepositoryStorageTreeErrors = {
|
|
15641
|
+
/**
|
|
15642
|
+
* Repository not found
|
|
15643
|
+
*/
|
|
15644
|
+
404: unknown;
|
|
15645
|
+
};
|
|
15646
|
+
|
|
15647
|
+
export type GetRepositoryStorageTreeResponses = {
|
|
15648
|
+
/**
|
|
15649
|
+
* Per-prefix storage rollup
|
|
15650
|
+
*/
|
|
15651
|
+
200: RepositoryStorageTreeResponse;
|
|
15652
|
+
};
|
|
15653
|
+
|
|
15654
|
+
export type GetRepositoryStorageTreeResponse = GetRepositoryStorageTreeResponses[keyof GetRepositoryStorageTreeResponses];
|
|
15655
|
+
|
|
14922
15656
|
export type TestUpstreamData = {
|
|
14923
15657
|
body?: never;
|
|
14924
15658
|
path: {
|
|
@@ -18167,7 +18901,7 @@ export type RotateWebhookSecretErrors = {
|
|
|
18167
18901
|
|
|
18168
18902
|
export type RotateWebhookSecretResponses = {
|
|
18169
18903
|
/**
|
|
18170
|
-
* Secret rotated. Body
|
|
18904
|
+
* Secret rotated. Body reports success and metadata only; the raw secret is not returned.
|
|
18171
18905
|
*/
|
|
18172
18906
|
200: RotateWebhookSecretResponse;
|
|
18173
18907
|
};
|