mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-14 02:12:11 +03:00
* fix(api-docs): generate request bodies for all encodings The OpenAPI generator only recognized generic body parameters, so JSON, form, and multipart declarations disappeared into empty application/json objects. Generate the declared media type and schema, preserve optionality and conditional requirements, and encode repeated form arrays the way Gin expects. Correct the request metadata exposed by the complete schemas and keep the panel and docs specifications synchronized. * fix(api-docs): align alternative request schemas Keep non-empty constraints on the selected request-body alternative without rejecting empty values for the alternatives that panel requests also include. Allow null client IP lists because model serialization emits them while cleared rows await pruning. * fix(api-docs): send object urlencoded fields as JSON, document the inbound update body Four defects the request-body rework exposed or left behind: - An object-typed field in an x-www-form-urlencoded body got no encoding entry, so OpenAPI 3.0 serialized it form-style. Swagger "Try it out" and generated clients sent memberWeights=3&memberWeights=0.2 to /panel/api/sub-balancers, and parseSubBalancerForm json.Unmarshals the raw field, so every such call failed with "invalid memberWeights". Emit encoding.<name>.contentType = application/json instead. - bodyRequiredOneOf names were never checked against the declared body params: a typo emitted an anyOf branch requiring a property that does not exist — unsatisfiable — and make gen still passed. Throw now, and extend the requestSchema guard to reject bodyRequiredOneOf as well. - /panel/api/inbounds/update/:id advertised no request body although its own summary says the shape mirrors /add and updateInbound binds one. Both entries now share an inboundBody const so they cannot drift. - The mixed-locations error was the only buildOperation throw without the method and path, aborting make gen without naming the offender. Regenerated frontend/public/openapi.json and copied it to docs/public/openapi.json. No MDX regeneration: no summary changed. --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
335 lines
27 KiB
Plaintext
335 lines
27 KiB
Plaintext
---
|
||
title: Server
|
||
description: System status, log retrieval, certificate generators, Xray binary
|
||
management, and backup/restore. All under /panel/api/server.
|
||
full: true
|
||
_openapi:
|
||
preload:
|
||
- ./public/openapi.json
|
||
toc:
|
||
- depth: 2
|
||
title: Serve this API description as an OpenAPI 3 document — the same file that
|
||
powers the API Docs page. Requires a session or Bearer token like the
|
||
rest of /panel/api. Useful for generating clients or importing into API
|
||
tooling.
|
||
url: '#serve-this-api-description-as-an-openapi-3-document--the-same-file-that-powers-the-api-docs-page-requires-a-session-or-bearer-token-like-the-rest-of-panelapi-useful-for-generating-clients-or-importing-into-api-tooling'
|
||
- depth: 2
|
||
title: 'Real-time machine snapshot: CPU, memory, swap, disk, network IO, load
|
||
averages, open connections, Xray state. Cached and refreshed every 2
|
||
seconds in the background.'
|
||
url: '#real-time-machine-snapshot-cpu-memory-swap-disk-network-io-load-averages-open-connections-xray-state-cached-and-refreshed-every-2-seconds-in-the-background'
|
||
- depth: 2
|
||
title: Reports whether per-client IP limits can be enforced on this host. The
|
||
panel uses it to gate the "IP Limit" field, since enforcement depends on
|
||
Fail2ban being installed.
|
||
url: '#reports-whether-per-client-ip-limits-can-be-enforced-on-this-host-the-panel-uses-it-to-gate-the-ip-limit-field-since-enforcement-depends-on-fail2ban-being-installed'
|
||
- depth: 2
|
||
title: 'Legacy: aggregated CPU history. Use /history/cpu/:bucket instead — same
|
||
data with a uniform {t, v} shape.'
|
||
url: '#legacy-aggregated-cpu-history-use-historycpubucket-instead--same-data-with-a-uniform-t-v-shape'
|
||
- depth: 2
|
||
title: Aggregated time-series for one metric. Returns an array of {t, v} samples
|
||
covering the last ~6 hours.
|
||
url: '#aggregated-time-series-for-one-metric-returns-an-array-of-t-v-samples-covering-the-last-6-hours'
|
||
- depth: 2
|
||
title: Xray runtime metrics state — whether the xray config has a `metrics`
|
||
block, which expvar keys are flowing, and the current snapshot values
|
||
for each. Returns an empty state when metrics are not configured.
|
||
url: '#xray-runtime-metrics-state--whether-the-xray-config-has-a-metrics-block-which-expvar-keys-are-flowing-and-the-current-snapshot-values-for-each-returns-an-empty-state-when-metrics-are-not-configured'
|
||
- depth: 2
|
||
title: Time-series history for one Xray runtime metric over the last ~6 hours.
|
||
Same {t, v} shape as /history/:metric/:bucket.
|
||
url: '#time-series-history-for-one-xray-runtime-metric-over-the-last-6-hours-same-t-v-shape-as-historymetricbucket'
|
||
- depth: 2
|
||
title: Latest snapshot from the Xray observatory — per-outbound latency, health
|
||
status, and last-probe time. Only populated when the Xray config has an
|
||
observatory configured.
|
||
url: '#latest-snapshot-from-the-xray-observatory--per-outbound-latency-health-status-and-last-probe-time-only-populated-when-the-xray-config-has-an-observatory-configured'
|
||
- depth: 2
|
||
title: Time-series of observatory probe results for one outbound tag. Same {t,
|
||
v} shape as the other history endpoints.
|
||
url: '#time-series-of-observatory-probe-results-for-one-outbound-tag-same-t-v-shape-as-the-other-history-endpoints'
|
||
- depth: 2
|
||
title: List Xray binary versions available for install on this host.
|
||
url: '#list-xray-binary-versions-available-for-install-on-this-host'
|
||
- depth: 2
|
||
title: Check whether a newer 3x-ui release is available on GitHub.
|
||
url: '#check-whether-a-newer-3x-ui-release-is-available-on-github'
|
||
- depth: 2
|
||
title: Report the outcome of the most recently launched panel self-update (see
|
||
POST updatePanel). Compare the returned runId against the one
|
||
updatePanel returned to tell this run apart from a stale result.
|
||
url: '#report-the-outcome-of-the-most-recently-launched-panel-self-update-see-post-updatepanel-compare-the-returned-runid-against-the-one-updatepanel-returned-to-tell-this-run-apart-from-a-stale-result'
|
||
- depth: 2
|
||
title: Return the assembled Xray config that’s currently running on this host.
|
||
url: '#return-the-assembled-xray-config-thats-currently-running-on-this-host'
|
||
- depth: 2
|
||
title: 'Stream a full database backup as an attachment: the SQLite .db file on
|
||
SQLite panels, or a pg_dump custom-format archive (.dump) on PostgreSQL
|
||
panels. Use as a manual backup.'
|
||
url: '#stream-a-full-database-backup-as-an-attachment-the-sqlite-db-file-on-sqlite-panels-or-a-pg_dump-custom-format-archive-dump-on-postgresql-panels-use-as-a-manual-backup'
|
||
- depth: 2
|
||
title: 'Stream a cross-engine migration file as an attachment: a .dump (SQL
|
||
text) on SQLite, or a .db SQLite database built from the live data on
|
||
PostgreSQL.'
|
||
url: '#stream-a-cross-engine-migration-file-as-an-attachment-a-dump-sql-text-on-sqlite-or-a-db-sqlite-database-built-from-the-live-data-on-postgresql'
|
||
- depth: 2
|
||
title: Generate a fresh UUID v4. Convenience helper for client IDs.
|
||
url: '#generate-a-fresh-uuid-v4-convenience-helper-for-client-ids'
|
||
- depth: 2
|
||
title: Return this panel's own web TLS certificate and key file paths. The
|
||
central panel calls it on a node (via the node API token) so "Set Cert
|
||
from Panel" fills a node-assigned inbound with paths that exist on the
|
||
node.
|
||
url: '#return-this-panels-own-web-tls-certificate-and-key-file-paths-the-central-panel-calls-it-on-a-node-via-the-node-api-token-so-set-cert-from-panel-fills-a-node-assigned-inbound-with-paths-that-exist-on-the-node'
|
||
- depth: 2
|
||
title: Read-only summaries (guid, parentGuid, name, address, status, versions)
|
||
of the nodes this panel manages. A parent panel calls it on a node (via
|
||
the node API token) to surface transitive sub-nodes in a chained
|
||
topology. Counts are computed by the parent, not returned here.
|
||
url: '#read-only-summaries-guid-parentguid-name-address-status-versions-of-the-nodes-this-panel-manages-a-parent-panel-calls-it-on-a-node-via-the-node-api-token-to-surface-transitive-sub-nodes-in-a-chained-topology-counts-are-computed-by-the-parent-not-returned-here'
|
||
- depth: 2
|
||
title: Generate a new X25519 keypair for Reality.
|
||
url: '#generate-a-new-x25519-keypair-for-reality'
|
||
- depth: 2
|
||
title: Generate a new ML-DSA-65 keypair (post-quantum signature). Returns
|
||
{privateKey, publicKey, seed}.
|
||
url: '#generate-a-new-ml-dsa-65-keypair-post-quantum-signature-returns-privatekey-publickey-seed'
|
||
- depth: 2
|
||
title: Generate a new ML-KEM-768 keypair (post-quantum KEM). Returns {clientKey,
|
||
serverKey}.
|
||
url: '#generate-a-new-ml-kem-768-keypair-post-quantum-kem-returns-clientkey-serverkey'
|
||
- depth: 2
|
||
title: Generate VLESS encryption auth options. Returns an auths array each with
|
||
id, label, encryption, and decryption fields.
|
||
url: '#generate-vless-encryption-auth-options-returns-an-auths-array-each-with-id-label-encryption-and-decryption-fields'
|
||
- depth: 2
|
||
title: Stop the Xray binary. All proxies go offline immediately.
|
||
url: '#stop-the-xray-binary-all-proxies-go-offline-immediately'
|
||
- depth: 2
|
||
title: Reload Xray with the current config. Typically required after structural
|
||
inbound or routing changes.
|
||
url: '#reload-xray-with-the-current-config-typically-required-after-structural-inbound-or-routing-changes'
|
||
- depth: 2
|
||
title: Download and install the specified Xray version. Pass "latest" for the
|
||
newest release.
|
||
url: '#download-and-install-the-specified-xray-version-pass-latest-for-the-newest-release'
|
||
- depth: 2
|
||
title: Self-update the panel to the latest version. The server restarts on
|
||
success.
|
||
url: '#self-update-the-panel-to-the-latest-version-the-server-restarts-on-success'
|
||
- depth: 2
|
||
title: Toggle the panel update channel between stable and the rolling per-commit
|
||
dev release. Only effective on dev builds.
|
||
url: '#toggle-the-panel-update-channel-between-stable-and-the-rolling-per-commit-dev-release-only-effective-on-dev-builds'
|
||
- depth: 2
|
||
title: Refresh the default GeoIP / GeoSite data files. Use the /:fileName
|
||
variant to update one file.
|
||
url: '#refresh-the-default-geoip--geosite-data-files-use-the-filename-variant-to-update-one-file'
|
||
- depth: 2
|
||
title: Refresh a single Geo file by filename (e.g. geoip.dat, geosite.dat).
|
||
url: '#refresh-a-single-geo-file-by-filename-eg-geoipdat-geositedat'
|
||
- depth: 2
|
||
title: Return the last N lines of the panel’s own log.
|
||
url: '#return-the-last-n-lines-of-the-panels-own-log'
|
||
- depth: 2
|
||
title: Return the last N lines of the Xray process log.
|
||
url: '#return-the-last-n-lines-of-the-xray-process-log'
|
||
- depth: 2
|
||
title: Return live AmneziaWG peer activity (handshake, endpoint, transfer) plus
|
||
the panel’s own AmneziaWG event lines.
|
||
url: '#return-live-amneziawg-peer-activity-handshake-endpoint-transfer-plus-the-panels-own-amneziawg-event-lines'
|
||
- depth: 2
|
||
title: Restore the panel DB from an uploaded backup (multipart form, field name
|
||
"db"). SQLite panels accept a SQLite database (.db) or a SQLite
|
||
migration dump (.dump); PostgreSQL panels accept a pg_dump archive
|
||
(.dump), a SQLite database (.db), or a SQLite migration dump. The panel
|
||
restarts after restore. Destructive.
|
||
url: '#restore-the-panel-db-from-an-uploaded-backup-multipart-form-field-name-db-sqlite-panels-accept-a-sqlite-database-db-or-a-sqlite-migration-dump-dump-postgresql-panels-accept-a-pg_dump-archive-dump-a-sqlite-database-db-or-a-sqlite-migration-dump-the-panel-restarts-after-restore-destructive'
|
||
- depth: 2
|
||
title: Generate a new ECH (Encrypted Client Hello) keypair and config list for
|
||
the given SNI.
|
||
url: '#generate-a-new-ech-encrypted-client-hello-keypair-and-config-list-for-the-given-sni'
|
||
- depth: 2
|
||
title: Compute the hex SHA-256 of a certificate (DER) for pinning
|
||
(pinnedPeerCertSha256). Provide either a server file path or inline
|
||
PEM/DER content.
|
||
url: '#compute-the-hex-sha-256-of-a-certificate-der-for-pinning-pinnedpeercertsha256-provide-either-a-server-file-path-or-inline-pemder-content'
|
||
- depth: 2
|
||
title: Run `xray tls ping` against a remote server and return its live
|
||
leaf-certificate SHA-256 hash(es) for pinning (pinnedPeerCertSha256).
|
||
url: '#run-xray-tls-ping-against-a-remote-server-and-return-its-live-leaf-certificate-sha-256-hashes-for-pinning-pinnedpeercertsha256'
|
||
- depth: 2
|
||
title: Run a live TLS 1.3 probe against a candidate REALITY target and return a
|
||
feasibility verdict (TLS 1.3 + h2 + X25519 + trusted certificate) plus
|
||
the certificate SAN DNS names. A target on a private/loopback address is
|
||
reported with privateTarget=true and probed only when allowPrivate is
|
||
set.
|
||
url: '#run-a-live-tls-13-probe-against-a-candidate-reality-target-and-return-a-feasibility-verdict-tls-13--h2--x25519--trusted-certificate-plus-the-certificate-san-dns-names-a-target-on-a-privateloopback-address-is-reported-with-privatetargettrue-and-probed-only-when-allowprivate-is-set'
|
||
- depth: 2
|
||
title: Probe/discover REALITY targets and return each verdict ranked by
|
||
feasibility then latency. Each comma-separated token may be a domain
|
||
(validated with SNI), a bare IP, or a CIDR range (discovered without SNI
|
||
by reading the certificate domain). When empty, a built-in seed list is
|
||
probed.
|
||
url: '#probediscover-reality-targets-and-return-each-verdict-ranked-by-feasibility-then-latency-each-comma-separated-token-may-be-a-domain-validated-with-sni-a-bare-ip-or-a-cidr-range-discovered-without-sni-by-reading-the-certificate-domain-when-empty-a-built-in-seed-list-is-probed'
|
||
- depth: 2
|
||
title: Fetch the fully aggregated inbound_client_ips database table. Used by
|
||
nodes to sync recently active IPs across the cluster.
|
||
url: '#fetch-the-fully-aggregated-inbound_client_ips-database-table-used-by-nodes-to-sync-recently-active-ips-across-the-cluster'
|
||
- depth: 2
|
||
title: Submit a list of recently active IP timestamps. The panel merges them
|
||
with the existing database to maintain a unified global IP-limit view.
|
||
url: '#submit-a-list-of-recently-active-ip-timestamps-the-panel-merges-them-with-the-existing-database-to-maintain-a-unified-global-ip-limit-view'
|
||
structuredData:
|
||
headings:
|
||
- content: Serve this API description as an OpenAPI 3 document — the same file
|
||
that powers the API Docs page. Requires a session or Bearer token like
|
||
the rest of /panel/api. Useful for generating clients or importing
|
||
into API tooling.
|
||
id: serve-this-api-description-as-an-openapi-3-document--the-same-file-that-powers-the-api-docs-page-requires-a-session-or-bearer-token-like-the-rest-of-panelapi-useful-for-generating-clients-or-importing-into-api-tooling
|
||
- content: 'Real-time machine snapshot: CPU, memory, swap, disk, network IO, load
|
||
averages, open connections, Xray state. Cached and refreshed every 2
|
||
seconds in the background.'
|
||
id: real-time-machine-snapshot-cpu-memory-swap-disk-network-io-load-averages-open-connections-xray-state-cached-and-refreshed-every-2-seconds-in-the-background
|
||
- content: Reports whether per-client IP limits can be enforced on this host. The
|
||
panel uses it to gate the "IP Limit" field, since enforcement depends
|
||
on Fail2ban being installed.
|
||
id: reports-whether-per-client-ip-limits-can-be-enforced-on-this-host-the-panel-uses-it-to-gate-the-ip-limit-field-since-enforcement-depends-on-fail2ban-being-installed
|
||
- content: 'Legacy: aggregated CPU history. Use /history/cpu/:bucket instead —
|
||
same data with a uniform {t, v} shape.'
|
||
id: legacy-aggregated-cpu-history-use-historycpubucket-instead--same-data-with-a-uniform-t-v-shape
|
||
- content: Aggregated time-series for one metric. Returns an array of {t, v}
|
||
samples covering the last ~6 hours.
|
||
id: aggregated-time-series-for-one-metric-returns-an-array-of-t-v-samples-covering-the-last-6-hours
|
||
- content: Xray runtime metrics state — whether the xray config has a `metrics`
|
||
block, which expvar keys are flowing, and the current snapshot values
|
||
for each. Returns an empty state when metrics are not configured.
|
||
id: xray-runtime-metrics-state--whether-the-xray-config-has-a-metrics-block-which-expvar-keys-are-flowing-and-the-current-snapshot-values-for-each-returns-an-empty-state-when-metrics-are-not-configured
|
||
- content: Time-series history for one Xray runtime metric over the last ~6 hours.
|
||
Same {t, v} shape as /history/:metric/:bucket.
|
||
id: time-series-history-for-one-xray-runtime-metric-over-the-last-6-hours-same-t-v-shape-as-historymetricbucket
|
||
- content: Latest snapshot from the Xray observatory — per-outbound latency,
|
||
health status, and last-probe time. Only populated when the Xray
|
||
config has an observatory configured.
|
||
id: latest-snapshot-from-the-xray-observatory--per-outbound-latency-health-status-and-last-probe-time-only-populated-when-the-xray-config-has-an-observatory-configured
|
||
- content: Time-series of observatory probe results for one outbound tag. Same {t,
|
||
v} shape as the other history endpoints.
|
||
id: time-series-of-observatory-probe-results-for-one-outbound-tag-same-t-v-shape-as-the-other-history-endpoints
|
||
- content: List Xray binary versions available for install on this host.
|
||
id: list-xray-binary-versions-available-for-install-on-this-host
|
||
- content: Check whether a newer 3x-ui release is available on GitHub.
|
||
id: check-whether-a-newer-3x-ui-release-is-available-on-github
|
||
- content: Report the outcome of the most recently launched panel self-update (see
|
||
POST updatePanel). Compare the returned runId against the one
|
||
updatePanel returned to tell this run apart from a stale result.
|
||
id: report-the-outcome-of-the-most-recently-launched-panel-self-update-see-post-updatepanel-compare-the-returned-runid-against-the-one-updatepanel-returned-to-tell-this-run-apart-from-a-stale-result
|
||
- content: Return the assembled Xray config that’s currently running on this host.
|
||
id: return-the-assembled-xray-config-thats-currently-running-on-this-host
|
||
- content: 'Stream a full database backup as an attachment: the SQLite .db file on
|
||
SQLite panels, or a pg_dump custom-format archive (.dump) on
|
||
PostgreSQL panels. Use as a manual backup.'
|
||
id: stream-a-full-database-backup-as-an-attachment-the-sqlite-db-file-on-sqlite-panels-or-a-pg_dump-custom-format-archive-dump-on-postgresql-panels-use-as-a-manual-backup
|
||
- content: 'Stream a cross-engine migration file as an attachment: a .dump (SQL
|
||
text) on SQLite, or a .db SQLite database built from the live data on
|
||
PostgreSQL.'
|
||
id: stream-a-cross-engine-migration-file-as-an-attachment-a-dump-sql-text-on-sqlite-or-a-db-sqlite-database-built-from-the-live-data-on-postgresql
|
||
- content: Generate a fresh UUID v4. Convenience helper for client IDs.
|
||
id: generate-a-fresh-uuid-v4-convenience-helper-for-client-ids
|
||
- content: Return this panel's own web TLS certificate and key file paths. The
|
||
central panel calls it on a node (via the node API token) so "Set Cert
|
||
from Panel" fills a node-assigned inbound with paths that exist on the
|
||
node.
|
||
id: return-this-panels-own-web-tls-certificate-and-key-file-paths-the-central-panel-calls-it-on-a-node-via-the-node-api-token-so-set-cert-from-panel-fills-a-node-assigned-inbound-with-paths-that-exist-on-the-node
|
||
- content: Read-only summaries (guid, parentGuid, name, address, status, versions)
|
||
of the nodes this panel manages. A parent panel calls it on a node
|
||
(via the node API token) to surface transitive sub-nodes in a chained
|
||
topology. Counts are computed by the parent, not returned here.
|
||
id: read-only-summaries-guid-parentguid-name-address-status-versions-of-the-nodes-this-panel-manages-a-parent-panel-calls-it-on-a-node-via-the-node-api-token-to-surface-transitive-sub-nodes-in-a-chained-topology-counts-are-computed-by-the-parent-not-returned-here
|
||
- content: Generate a new X25519 keypair for Reality.
|
||
id: generate-a-new-x25519-keypair-for-reality
|
||
- content: Generate a new ML-DSA-65 keypair (post-quantum signature). Returns
|
||
{privateKey, publicKey, seed}.
|
||
id: generate-a-new-ml-dsa-65-keypair-post-quantum-signature-returns-privatekey-publickey-seed
|
||
- content: Generate a new ML-KEM-768 keypair (post-quantum KEM). Returns
|
||
{clientKey, serverKey}.
|
||
id: generate-a-new-ml-kem-768-keypair-post-quantum-kem-returns-clientkey-serverkey
|
||
- content: Generate VLESS encryption auth options. Returns an auths array each
|
||
with id, label, encryption, and decryption fields.
|
||
id: generate-vless-encryption-auth-options-returns-an-auths-array-each-with-id-label-encryption-and-decryption-fields
|
||
- content: Stop the Xray binary. All proxies go offline immediately.
|
||
id: stop-the-xray-binary-all-proxies-go-offline-immediately
|
||
- content: Reload Xray with the current config. Typically required after
|
||
structural inbound or routing changes.
|
||
id: reload-xray-with-the-current-config-typically-required-after-structural-inbound-or-routing-changes
|
||
- content: Download and install the specified Xray version. Pass "latest" for the
|
||
newest release.
|
||
id: download-and-install-the-specified-xray-version-pass-latest-for-the-newest-release
|
||
- content: Self-update the panel to the latest version. The server restarts on
|
||
success.
|
||
id: self-update-the-panel-to-the-latest-version-the-server-restarts-on-success
|
||
- content: Toggle the panel update channel between stable and the rolling
|
||
per-commit dev release. Only effective on dev builds.
|
||
id: toggle-the-panel-update-channel-between-stable-and-the-rolling-per-commit-dev-release-only-effective-on-dev-builds
|
||
- content: Refresh the default GeoIP / GeoSite data files. Use the /:fileName
|
||
variant to update one file.
|
||
id: refresh-the-default-geoip--geosite-data-files-use-the-filename-variant-to-update-one-file
|
||
- content: Refresh a single Geo file by filename (e.g. geoip.dat, geosite.dat).
|
||
id: refresh-a-single-geo-file-by-filename-eg-geoipdat-geositedat
|
||
- content: Return the last N lines of the panel’s own log.
|
||
id: return-the-last-n-lines-of-the-panels-own-log
|
||
- content: Return the last N lines of the Xray process log.
|
||
id: return-the-last-n-lines-of-the-xray-process-log
|
||
- content: Return live AmneziaWG peer activity (handshake, endpoint, transfer)
|
||
plus the panel’s own AmneziaWG event lines.
|
||
id: return-live-amneziawg-peer-activity-handshake-endpoint-transfer-plus-the-panels-own-amneziawg-event-lines
|
||
- content: Restore the panel DB from an uploaded backup (multipart form, field
|
||
name "db"). SQLite panels accept a SQLite database (.db) or a SQLite
|
||
migration dump (.dump); PostgreSQL panels accept a pg_dump archive
|
||
(.dump), a SQLite database (.db), or a SQLite migration dump. The
|
||
panel restarts after restore. Destructive.
|
||
id: restore-the-panel-db-from-an-uploaded-backup-multipart-form-field-name-db-sqlite-panels-accept-a-sqlite-database-db-or-a-sqlite-migration-dump-dump-postgresql-panels-accept-a-pg_dump-archive-dump-a-sqlite-database-db-or-a-sqlite-migration-dump-the-panel-restarts-after-restore-destructive
|
||
- content: Generate a new ECH (Encrypted Client Hello) keypair and config list for
|
||
the given SNI.
|
||
id: generate-a-new-ech-encrypted-client-hello-keypair-and-config-list-for-the-given-sni
|
||
- content: Compute the hex SHA-256 of a certificate (DER) for pinning
|
||
(pinnedPeerCertSha256). Provide either a server file path or inline
|
||
PEM/DER content.
|
||
id: compute-the-hex-sha-256-of-a-certificate-der-for-pinning-pinnedpeercertsha256-provide-either-a-server-file-path-or-inline-pemder-content
|
||
- content: Run `xray tls ping` against a remote server and return its live
|
||
leaf-certificate SHA-256 hash(es) for pinning (pinnedPeerCertSha256).
|
||
id: run-xray-tls-ping-against-a-remote-server-and-return-its-live-leaf-certificate-sha-256-hashes-for-pinning-pinnedpeercertsha256
|
||
- content: Run a live TLS 1.3 probe against a candidate REALITY target and return
|
||
a feasibility verdict (TLS 1.3 + h2 + X25519 + trusted certificate)
|
||
plus the certificate SAN DNS names. A target on a private/loopback
|
||
address is reported with privateTarget=true and probed only when
|
||
allowPrivate is set.
|
||
id: run-a-live-tls-13-probe-against-a-candidate-reality-target-and-return-a-feasibility-verdict-tls-13--h2--x25519--trusted-certificate-plus-the-certificate-san-dns-names-a-target-on-a-privateloopback-address-is-reported-with-privatetargettrue-and-probed-only-when-allowprivate-is-set
|
||
- content: Probe/discover REALITY targets and return each verdict ranked by
|
||
feasibility then latency. Each comma-separated token may be a domain
|
||
(validated with SNI), a bare IP, or a CIDR range (discovered without
|
||
SNI by reading the certificate domain). When empty, a built-in seed
|
||
list is probed.
|
||
id: probediscover-reality-targets-and-return-each-verdict-ranked-by-feasibility-then-latency-each-comma-separated-token-may-be-a-domain-validated-with-sni-a-bare-ip-or-a-cidr-range-discovered-without-sni-by-reading-the-certificate-domain-when-empty-a-built-in-seed-list-is-probed
|
||
- content: Fetch the fully aggregated inbound_client_ips database table. Used by
|
||
nodes to sync recently active IPs across the cluster.
|
||
id: fetch-the-fully-aggregated-inbound_client_ips-database-table-used-by-nodes-to-sync-recently-active-ips-across-the-cluster
|
||
- content: Submit a list of recently active IP timestamps. The panel merges them
|
||
with the existing database to maintain a unified global IP-limit view.
|
||
id: submit-a-list-of-recently-active-ip-timestamps-the-panel-merges-them-with-the-existing-database-to-maintain-a-unified-global-ip-limit-view
|
||
contents: []
|
||
---
|
||
|
||
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
|
||
|
||
export default function Layout(props) {
|
||
const { APIPage, OpenAPIPage } = props.components ?? {};
|
||
// "APIPage" is the old name from v10, this allows both for backward compatibility
|
||
const Comp = OpenAPIPage ?? APIPage;
|
||
return (
|
||
<>
|
||
{props.children}
|
||
<Comp document="./public/openapi.json" webhooks={[]} operations={[{"path":"/panel/api/openapi.json","method":"get"},{"path":"/panel/api/server/status","method":"get"},{"path":"/panel/api/server/fail2banStatus","method":"get"},{"path":"/panel/api/server/cpuHistory/{bucket}","method":"get"},{"path":"/panel/api/server/history/{metric}/{bucket}","method":"get"},{"path":"/panel/api/server/xrayMetricsState","method":"get"},{"path":"/panel/api/server/xrayMetricsHistory/{metric}/{bucket}","method":"get"},{"path":"/panel/api/server/xrayObservatory","method":"get"},{"path":"/panel/api/server/xrayObservatoryHistory/{tag}/{bucket}","method":"get"},{"path":"/panel/api/server/getXrayVersion","method":"get"},{"path":"/panel/api/server/getPanelUpdateInfo","method":"get"},{"path":"/panel/api/server/getUpdateStatus","method":"get"},{"path":"/panel/api/server/getConfigJson","method":"get"},{"path":"/panel/api/server/getDb","method":"get"},{"path":"/panel/api/server/getMigration","method":"get"},{"path":"/panel/api/server/getNewUUID","method":"get"},{"path":"/panel/api/server/getWebCertFiles","method":"get"},{"path":"/panel/api/server/descendants","method":"get"},{"path":"/panel/api/server/getNewX25519Cert","method":"get"},{"path":"/panel/api/server/getNewmldsa65","method":"get"},{"path":"/panel/api/server/getNewmlkem768","method":"get"},{"path":"/panel/api/server/getNewVlessEnc","method":"get"},{"path":"/panel/api/server/stopXrayService","method":"post"},{"path":"/panel/api/server/restartXrayService","method":"post"},{"path":"/panel/api/server/installXray/{version}","method":"post"},{"path":"/panel/api/server/updatePanel","method":"post"},{"path":"/panel/api/server/setUpdateChannel","method":"post"},{"path":"/panel/api/server/updateGeofile","method":"post"},{"path":"/panel/api/server/updateGeofile/{fileName}","method":"post"},{"path":"/panel/api/server/logs/{count}","method":"post"},{"path":"/panel/api/server/xraylogs/{count}","method":"post"},{"path":"/panel/api/server/amneziawglogs/{count}","method":"post"},{"path":"/panel/api/server/importDB","method":"post"},{"path":"/panel/api/server/getNewEchCert","method":"post"},{"path":"/panel/api/server/getCertHash","method":"post"},{"path":"/panel/api/server/getRemoteCertHash","method":"post"},{"path":"/panel/api/server/scanRealityTarget","method":"post"},{"path":"/panel/api/server/scanRealityTargets","method":"post"},{"path":"/panel/api/server/clientIps","method":"get"},{"path":"/panel/api/server/clientIps","method":"post"}]} showTitle />
|
||
</>
|
||
);
|
||
} |