mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-07-04 11:54:24 +00:00
1ca5924a44
* feat(mtproto): add MTProto (FakeTLS) protocol via managed mtg sidecar Xray-core has no mtproto proxy, so mtproto inbounds run as standalone mtg (9seconds/mtg) sidecar processes managed by the panel — one per inbound — and are excluded from the generated Xray config entirely. - model: MTProto protocol constant, validator, and FakeTLS secret helpers (GenerateFakeTLSSecret/HealMtprotoSecret) - mtproto package: per-inbound mtg process manager with reconcile, graceful stop, and best-effort Prometheus traffic scraping - runtime: delegate mtproto inbounds to the mtg manager instead of the Xray gRPC API; skip mtproto when building the Xray config - web: boot reconcile + StopAll wiring, periodic reconcile/traffic job, port-conflict transport, secret healing on inbound add/update - sub: tg:// proxy share-link generation - frontend: protocol option, Zod schema, Protocol tab (FakeTLS domain + regenerable secret), info-modal link, and i18n - provisioning: fetch mtg v2.2.8 in install.sh, DockerInit.sh, and the Linux + Windows release workflows * fix * fix * fix: address Copilot review comments on mtproto PR - web/web.go: create NewMtprotoJob once and reuse for cron + initial run - mtproto/manager.go: StopAll cleans up per-inbound config files on shutdown - mtproto/manager.go: CollectTraffic releases mutex before HTTP scrapes to avoid blocking Ensure/Reconcile/Remove during network I/O - database/model/model.go: panic on crypto/rand failure in mtprotoRandomMiddle instead of silently producing a weak all-zero secret - install.sh: fix chmod to handle renamed bin/mtg-linux-arm on armv5/v6/v7
1787 lines
43 KiB
TypeScript
1787 lines
43 KiB
TypeScript
// Code generated by tools/openapigen. DO NOT EDIT.
|
|
export const SCHEMAS: Record<string, unknown> = {
|
|
"AllSetting": {
|
|
"description": "AllSetting contains all configuration settings for the 3x-ui panel including web server, Telegram bot, and subscription settings.",
|
|
"properties": {
|
|
"datepicker": {
|
|
"description": "Date picker format",
|
|
"type": "string"
|
|
},
|
|
"expireDiff": {
|
|
"description": "Expiration warning threshold in days",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"externalTrafficInformEnable": {
|
|
"description": "Enable external traffic reporting",
|
|
"type": "boolean"
|
|
},
|
|
"externalTrafficInformURI": {
|
|
"description": "URI for external traffic reporting",
|
|
"type": "string"
|
|
},
|
|
"ldapAutoCreate": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapAutoDelete": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapBaseDN": {
|
|
"type": "string"
|
|
},
|
|
"ldapBindDN": {
|
|
"type": "string"
|
|
},
|
|
"ldapDefaultExpiryDays": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapDefaultLimitIP": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapDefaultTotalGB": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapEnable": {
|
|
"description": "LDAP settings",
|
|
"type": "boolean"
|
|
},
|
|
"ldapFlagField": {
|
|
"description": "Generic flag configuration",
|
|
"type": "string"
|
|
},
|
|
"ldapHost": {
|
|
"type": "string"
|
|
},
|
|
"ldapInboundTags": {
|
|
"type": "string"
|
|
},
|
|
"ldapInvertFlag": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapPassword": {
|
|
"type": "string"
|
|
},
|
|
"ldapPort": {
|
|
"maximum": 65535,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapSyncCron": {
|
|
"type": "string"
|
|
},
|
|
"ldapTruthyValues": {
|
|
"type": "string"
|
|
},
|
|
"ldapUseTLS": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapUserAttr": {
|
|
"description": "e.g., mail or uid",
|
|
"type": "string"
|
|
},
|
|
"ldapUserFilter": {
|
|
"type": "string"
|
|
},
|
|
"ldapVlessField": {
|
|
"type": "string"
|
|
},
|
|
"pageSize": {
|
|
"description": "UI settings\nNumber of items per page in lists (0 disables pagination)",
|
|
"maximum": 1000,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"panelProxy": {
|
|
"description": "Proxy URL for the panel's own outbound requests (GitHub/Telegram)",
|
|
"type": "string"
|
|
},
|
|
"remarkModel": {
|
|
"description": "Remark model pattern for inbounds",
|
|
"type": "string"
|
|
},
|
|
"restartXrayOnClientDisable": {
|
|
"description": "Restart Xray when clients are auto-disabled by expiry/traffic limit",
|
|
"type": "boolean"
|
|
},
|
|
"sessionMaxAge": {
|
|
"description": "Session maximum age in minutes (cap at one year)",
|
|
"maximum": 525600,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
},
|
|
"subAnnounce": {
|
|
"description": "Subscription announce",
|
|
"type": "string"
|
|
},
|
|
"subCertFile": {
|
|
"description": "SSL certificate file for subscription server",
|
|
"type": "string"
|
|
},
|
|
"subClashEnable": {
|
|
"description": "Enable Clash/Mihomo subscription endpoint",
|
|
"type": "boolean"
|
|
},
|
|
"subClashEnableRouting": {
|
|
"description": "Enable global routing rules for Clash/Mihomo",
|
|
"type": "boolean"
|
|
},
|
|
"subClashPath": {
|
|
"description": "Path for Clash/Mihomo subscription endpoint",
|
|
"type": "string"
|
|
},
|
|
"subClashRules": {
|
|
"description": "Clash/Mihomo global routing rules",
|
|
"type": "string"
|
|
},
|
|
"subClashURI": {
|
|
"description": "Clash/Mihomo subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subDomain": {
|
|
"description": "Domain for subscription server validation",
|
|
"type": "string"
|
|
},
|
|
"subEmailInRemark": {
|
|
"description": "Include email in subscription remark/name",
|
|
"type": "boolean"
|
|
},
|
|
"subEnable": {
|
|
"description": "Subscription server settings\nEnable subscription server",
|
|
"type": "boolean"
|
|
},
|
|
"subEnableRouting": {
|
|
"description": "Enable routing for subscription",
|
|
"type": "boolean"
|
|
},
|
|
"subEncrypt": {
|
|
"description": "Encrypt subscription responses",
|
|
"type": "boolean"
|
|
},
|
|
"subJsonEnable": {
|
|
"description": "Enable JSON subscription endpoint",
|
|
"type": "boolean"
|
|
},
|
|
"subJsonFinalMask": {
|
|
"description": "JSON subscription global finalmask (tcp/udp masks + quicParams)",
|
|
"type": "string"
|
|
},
|
|
"subJsonMux": {
|
|
"description": "JSON subscription mux configuration",
|
|
"type": "string"
|
|
},
|
|
"subJsonPath": {
|
|
"description": "Path for JSON subscription endpoint",
|
|
"type": "string"
|
|
},
|
|
"subJsonRules": {
|
|
"type": "string"
|
|
},
|
|
"subJsonURI": {
|
|
"description": "JSON subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subKeyFile": {
|
|
"description": "SSL private key file for subscription server",
|
|
"type": "string"
|
|
},
|
|
"subListen": {
|
|
"description": "Subscription server listen IP",
|
|
"type": "string"
|
|
},
|
|
"subPath": {
|
|
"description": "Base path for subscription URLs",
|
|
"type": "string"
|
|
},
|
|
"subPort": {
|
|
"description": "Subscription server port",
|
|
"maximum": 65535,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
},
|
|
"subProfileUrl": {
|
|
"description": "Subscription profile URL",
|
|
"type": "string"
|
|
},
|
|
"subRoutingRules": {
|
|
"description": "Subscription global routing rules (Only for Happ)",
|
|
"type": "string"
|
|
},
|
|
"subShowInfo": {
|
|
"description": "Show client information in subscriptions",
|
|
"type": "boolean"
|
|
},
|
|
"subSupportUrl": {
|
|
"description": "Subscription support URL",
|
|
"type": "string"
|
|
},
|
|
"subTitle": {
|
|
"description": "Subscription title",
|
|
"type": "string"
|
|
},
|
|
"subURI": {
|
|
"description": "Subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subUpdates": {
|
|
"description": "Subscription update interval in minutes",
|
|
"maximum": 525600,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"tgBotAPIServer": {
|
|
"description": "Custom API server for Telegram bot",
|
|
"type": "string"
|
|
},
|
|
"tgBotBackup": {
|
|
"description": "Enable database backup via Telegram",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotChatId": {
|
|
"description": "Telegram chat ID for notifications",
|
|
"type": "string"
|
|
},
|
|
"tgBotEnable": {
|
|
"description": "Telegram bot settings\nEnable Telegram bot notifications",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotLoginNotify": {
|
|
"description": "Send login notifications",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotProxy": {
|
|
"description": "Proxy URL for Telegram bot",
|
|
"type": "string"
|
|
},
|
|
"tgBotToken": {
|
|
"description": "Telegram bot token",
|
|
"type": "string"
|
|
},
|
|
"tgCpu": {
|
|
"description": "CPU usage threshold for alerts (percent)",
|
|
"maximum": 100,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"tgLang": {
|
|
"description": "Telegram bot language",
|
|
"type": "string"
|
|
},
|
|
"tgRunTime": {
|
|
"description": "Cron schedule for Telegram notifications",
|
|
"type": "string"
|
|
},
|
|
"timeLocation": {
|
|
"description": "Security settings\nTime zone location",
|
|
"type": "string"
|
|
},
|
|
"trafficDiff": {
|
|
"description": "Traffic warning threshold percentage",
|
|
"maximum": 100,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"trustedProxyCIDRs": {
|
|
"description": "Trusted reverse proxy IPs/CIDRs for forwarded headers",
|
|
"type": "string"
|
|
},
|
|
"twoFactorEnable": {
|
|
"description": "Enable two-factor authentication",
|
|
"type": "boolean"
|
|
},
|
|
"twoFactorToken": {
|
|
"description": "Two-factor authentication token",
|
|
"type": "string"
|
|
},
|
|
"webBasePath": {
|
|
"description": "Base path for web panel URLs",
|
|
"type": "string"
|
|
},
|
|
"webCertFile": {
|
|
"description": "Path to SSL certificate file for web server",
|
|
"type": "string"
|
|
},
|
|
"webDomain": {
|
|
"description": "Web server domain for domain validation",
|
|
"type": "string"
|
|
},
|
|
"webKeyFile": {
|
|
"description": "Path to SSL private key file for web server",
|
|
"type": "string"
|
|
},
|
|
"webListen": {
|
|
"description": "Web server settings\nWeb server listen IP address",
|
|
"type": "string"
|
|
},
|
|
"webPort": {
|
|
"description": "Web server port number",
|
|
"maximum": 65535,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"datepicker",
|
|
"expireDiff",
|
|
"externalTrafficInformEnable",
|
|
"externalTrafficInformURI",
|
|
"ldapAutoCreate",
|
|
"ldapAutoDelete",
|
|
"ldapBaseDN",
|
|
"ldapBindDN",
|
|
"ldapDefaultExpiryDays",
|
|
"ldapDefaultLimitIP",
|
|
"ldapDefaultTotalGB",
|
|
"ldapEnable",
|
|
"ldapFlagField",
|
|
"ldapHost",
|
|
"ldapInboundTags",
|
|
"ldapInvertFlag",
|
|
"ldapPassword",
|
|
"ldapPort",
|
|
"ldapSyncCron",
|
|
"ldapTruthyValues",
|
|
"ldapUseTLS",
|
|
"ldapUserAttr",
|
|
"ldapUserFilter",
|
|
"ldapVlessField",
|
|
"pageSize",
|
|
"panelProxy",
|
|
"remarkModel",
|
|
"restartXrayOnClientDisable",
|
|
"sessionMaxAge",
|
|
"subAnnounce",
|
|
"subCertFile",
|
|
"subClashEnable",
|
|
"subClashEnableRouting",
|
|
"subClashPath",
|
|
"subClashRules",
|
|
"subClashURI",
|
|
"subDomain",
|
|
"subEmailInRemark",
|
|
"subEnable",
|
|
"subEnableRouting",
|
|
"subEncrypt",
|
|
"subJsonEnable",
|
|
"subJsonFinalMask",
|
|
"subJsonMux",
|
|
"subJsonPath",
|
|
"subJsonRules",
|
|
"subJsonURI",
|
|
"subKeyFile",
|
|
"subListen",
|
|
"subPath",
|
|
"subPort",
|
|
"subProfileUrl",
|
|
"subRoutingRules",
|
|
"subShowInfo",
|
|
"subSupportUrl",
|
|
"subTitle",
|
|
"subURI",
|
|
"subUpdates",
|
|
"tgBotAPIServer",
|
|
"tgBotBackup",
|
|
"tgBotChatId",
|
|
"tgBotEnable",
|
|
"tgBotLoginNotify",
|
|
"tgBotProxy",
|
|
"tgBotToken",
|
|
"tgCpu",
|
|
"tgLang",
|
|
"tgRunTime",
|
|
"timeLocation",
|
|
"trafficDiff",
|
|
"trustedProxyCIDRs",
|
|
"twoFactorEnable",
|
|
"twoFactorToken",
|
|
"webBasePath",
|
|
"webCertFile",
|
|
"webDomain",
|
|
"webKeyFile",
|
|
"webListen",
|
|
"webPort"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"AllSettingView": {
|
|
"description": "AllSettingView is the browser-safe settings read model. Secret values\nare redacted from the embedded write model and represented by presence\nflags so the UI can show configured/not configured state.",
|
|
"properties": {
|
|
"datepicker": {
|
|
"description": "Date picker format",
|
|
"type": "string"
|
|
},
|
|
"expireDiff": {
|
|
"description": "Expiration warning threshold in days",
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"externalTrafficInformEnable": {
|
|
"description": "Enable external traffic reporting",
|
|
"type": "boolean"
|
|
},
|
|
"externalTrafficInformURI": {
|
|
"description": "URI for external traffic reporting",
|
|
"type": "string"
|
|
},
|
|
"hasApiToken": {
|
|
"type": "boolean"
|
|
},
|
|
"hasLdapPassword": {
|
|
"type": "boolean"
|
|
},
|
|
"hasNordSecret": {
|
|
"type": "boolean"
|
|
},
|
|
"hasTgBotToken": {
|
|
"type": "boolean"
|
|
},
|
|
"hasTwoFactorToken": {
|
|
"type": "boolean"
|
|
},
|
|
"hasWarpSecret": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapAutoCreate": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapAutoDelete": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapBaseDN": {
|
|
"type": "string"
|
|
},
|
|
"ldapBindDN": {
|
|
"type": "string"
|
|
},
|
|
"ldapDefaultExpiryDays": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapDefaultLimitIP": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapDefaultTotalGB": {
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapEnable": {
|
|
"description": "LDAP settings",
|
|
"type": "boolean"
|
|
},
|
|
"ldapFlagField": {
|
|
"description": "Generic flag configuration",
|
|
"type": "string"
|
|
},
|
|
"ldapHost": {
|
|
"type": "string"
|
|
},
|
|
"ldapInboundTags": {
|
|
"type": "string"
|
|
},
|
|
"ldapInvertFlag": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapPassword": {
|
|
"type": "string"
|
|
},
|
|
"ldapPort": {
|
|
"maximum": 65535,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"ldapSyncCron": {
|
|
"type": "string"
|
|
},
|
|
"ldapTruthyValues": {
|
|
"type": "string"
|
|
},
|
|
"ldapUseTLS": {
|
|
"type": "boolean"
|
|
},
|
|
"ldapUserAttr": {
|
|
"description": "e.g., mail or uid",
|
|
"type": "string"
|
|
},
|
|
"ldapUserFilter": {
|
|
"type": "string"
|
|
},
|
|
"ldapVlessField": {
|
|
"type": "string"
|
|
},
|
|
"pageSize": {
|
|
"description": "UI settings\nNumber of items per page in lists (0 disables pagination)",
|
|
"maximum": 1000,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"panelProxy": {
|
|
"description": "Proxy URL for the panel's own outbound requests (GitHub/Telegram)",
|
|
"type": "string"
|
|
},
|
|
"remarkModel": {
|
|
"description": "Remark model pattern for inbounds",
|
|
"type": "string"
|
|
},
|
|
"restartXrayOnClientDisable": {
|
|
"description": "Restart Xray when clients are auto-disabled by expiry/traffic limit",
|
|
"type": "boolean"
|
|
},
|
|
"sessionMaxAge": {
|
|
"description": "Session maximum age in minutes (cap at one year)",
|
|
"maximum": 525600,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
},
|
|
"subAnnounce": {
|
|
"description": "Subscription announce",
|
|
"type": "string"
|
|
},
|
|
"subCertFile": {
|
|
"description": "SSL certificate file for subscription server",
|
|
"type": "string"
|
|
},
|
|
"subClashEnable": {
|
|
"description": "Enable Clash/Mihomo subscription endpoint",
|
|
"type": "boolean"
|
|
},
|
|
"subClashEnableRouting": {
|
|
"description": "Enable global routing rules for Clash/Mihomo",
|
|
"type": "boolean"
|
|
},
|
|
"subClashPath": {
|
|
"description": "Path for Clash/Mihomo subscription endpoint",
|
|
"type": "string"
|
|
},
|
|
"subClashRules": {
|
|
"description": "Clash/Mihomo global routing rules",
|
|
"type": "string"
|
|
},
|
|
"subClashURI": {
|
|
"description": "Clash/Mihomo subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subDomain": {
|
|
"description": "Domain for subscription server validation",
|
|
"type": "string"
|
|
},
|
|
"subEmailInRemark": {
|
|
"description": "Include email in subscription remark/name",
|
|
"type": "boolean"
|
|
},
|
|
"subEnable": {
|
|
"description": "Subscription server settings\nEnable subscription server",
|
|
"type": "boolean"
|
|
},
|
|
"subEnableRouting": {
|
|
"description": "Enable routing for subscription",
|
|
"type": "boolean"
|
|
},
|
|
"subEncrypt": {
|
|
"description": "Encrypt subscription responses",
|
|
"type": "boolean"
|
|
},
|
|
"subJsonEnable": {
|
|
"description": "Enable JSON subscription endpoint",
|
|
"type": "boolean"
|
|
},
|
|
"subJsonFinalMask": {
|
|
"description": "JSON subscription global finalmask (tcp/udp masks + quicParams)",
|
|
"type": "string"
|
|
},
|
|
"subJsonMux": {
|
|
"description": "JSON subscription mux configuration",
|
|
"type": "string"
|
|
},
|
|
"subJsonPath": {
|
|
"description": "Path for JSON subscription endpoint",
|
|
"type": "string"
|
|
},
|
|
"subJsonRules": {
|
|
"type": "string"
|
|
},
|
|
"subJsonURI": {
|
|
"description": "JSON subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subKeyFile": {
|
|
"description": "SSL private key file for subscription server",
|
|
"type": "string"
|
|
},
|
|
"subListen": {
|
|
"description": "Subscription server listen IP",
|
|
"type": "string"
|
|
},
|
|
"subPath": {
|
|
"description": "Base path for subscription URLs",
|
|
"type": "string"
|
|
},
|
|
"subPort": {
|
|
"description": "Subscription server port",
|
|
"maximum": 65535,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
},
|
|
"subProfileUrl": {
|
|
"description": "Subscription profile URL",
|
|
"type": "string"
|
|
},
|
|
"subRoutingRules": {
|
|
"description": "Subscription global routing rules (Only for Happ)",
|
|
"type": "string"
|
|
},
|
|
"subShowInfo": {
|
|
"description": "Show client information in subscriptions",
|
|
"type": "boolean"
|
|
},
|
|
"subSupportUrl": {
|
|
"description": "Subscription support URL",
|
|
"type": "string"
|
|
},
|
|
"subTitle": {
|
|
"description": "Subscription title",
|
|
"type": "string"
|
|
},
|
|
"subURI": {
|
|
"description": "Subscription server URI",
|
|
"type": "string"
|
|
},
|
|
"subUpdates": {
|
|
"description": "Subscription update interval in minutes",
|
|
"maximum": 525600,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"tgBotAPIServer": {
|
|
"description": "Custom API server for Telegram bot",
|
|
"type": "string"
|
|
},
|
|
"tgBotBackup": {
|
|
"description": "Enable database backup via Telegram",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotChatId": {
|
|
"description": "Telegram chat ID for notifications",
|
|
"type": "string"
|
|
},
|
|
"tgBotEnable": {
|
|
"description": "Telegram bot settings\nEnable Telegram bot notifications",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotLoginNotify": {
|
|
"description": "Send login notifications",
|
|
"type": "boolean"
|
|
},
|
|
"tgBotProxy": {
|
|
"description": "Proxy URL for Telegram bot",
|
|
"type": "string"
|
|
},
|
|
"tgBotToken": {
|
|
"description": "Telegram bot token",
|
|
"type": "string"
|
|
},
|
|
"tgCpu": {
|
|
"description": "CPU usage threshold for alerts (percent)",
|
|
"maximum": 100,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"tgLang": {
|
|
"description": "Telegram bot language",
|
|
"type": "string"
|
|
},
|
|
"tgRunTime": {
|
|
"description": "Cron schedule for Telegram notifications",
|
|
"type": "string"
|
|
},
|
|
"timeLocation": {
|
|
"description": "Security settings\nTime zone location",
|
|
"type": "string"
|
|
},
|
|
"trafficDiff": {
|
|
"description": "Traffic warning threshold percentage",
|
|
"maximum": 100,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"trustedProxyCIDRs": {
|
|
"description": "Trusted reverse proxy IPs/CIDRs for forwarded headers",
|
|
"type": "string"
|
|
},
|
|
"twoFactorEnable": {
|
|
"description": "Enable two-factor authentication",
|
|
"type": "boolean"
|
|
},
|
|
"twoFactorToken": {
|
|
"description": "Two-factor authentication token",
|
|
"type": "string"
|
|
},
|
|
"webBasePath": {
|
|
"description": "Base path for web panel URLs",
|
|
"type": "string"
|
|
},
|
|
"webCertFile": {
|
|
"description": "Path to SSL certificate file for web server",
|
|
"type": "string"
|
|
},
|
|
"webDomain": {
|
|
"description": "Web server domain for domain validation",
|
|
"type": "string"
|
|
},
|
|
"webKeyFile": {
|
|
"description": "Path to SSL private key file for web server",
|
|
"type": "string"
|
|
},
|
|
"webListen": {
|
|
"description": "Web server settings\nWeb server listen IP address",
|
|
"type": "string"
|
|
},
|
|
"webPort": {
|
|
"description": "Web server port number",
|
|
"maximum": 65535,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"datepicker",
|
|
"expireDiff",
|
|
"externalTrafficInformEnable",
|
|
"externalTrafficInformURI",
|
|
"hasApiToken",
|
|
"hasLdapPassword",
|
|
"hasNordSecret",
|
|
"hasTgBotToken",
|
|
"hasTwoFactorToken",
|
|
"hasWarpSecret",
|
|
"ldapAutoCreate",
|
|
"ldapAutoDelete",
|
|
"ldapBaseDN",
|
|
"ldapBindDN",
|
|
"ldapDefaultExpiryDays",
|
|
"ldapDefaultLimitIP",
|
|
"ldapDefaultTotalGB",
|
|
"ldapEnable",
|
|
"ldapFlagField",
|
|
"ldapHost",
|
|
"ldapInboundTags",
|
|
"ldapInvertFlag",
|
|
"ldapPassword",
|
|
"ldapPort",
|
|
"ldapSyncCron",
|
|
"ldapTruthyValues",
|
|
"ldapUseTLS",
|
|
"ldapUserAttr",
|
|
"ldapUserFilter",
|
|
"ldapVlessField",
|
|
"pageSize",
|
|
"panelProxy",
|
|
"remarkModel",
|
|
"restartXrayOnClientDisable",
|
|
"sessionMaxAge",
|
|
"subAnnounce",
|
|
"subCertFile",
|
|
"subClashEnable",
|
|
"subClashEnableRouting",
|
|
"subClashPath",
|
|
"subClashRules",
|
|
"subClashURI",
|
|
"subDomain",
|
|
"subEmailInRemark",
|
|
"subEnable",
|
|
"subEnableRouting",
|
|
"subEncrypt",
|
|
"subJsonEnable",
|
|
"subJsonFinalMask",
|
|
"subJsonMux",
|
|
"subJsonPath",
|
|
"subJsonRules",
|
|
"subJsonURI",
|
|
"subKeyFile",
|
|
"subListen",
|
|
"subPath",
|
|
"subPort",
|
|
"subProfileUrl",
|
|
"subRoutingRules",
|
|
"subShowInfo",
|
|
"subSupportUrl",
|
|
"subTitle",
|
|
"subURI",
|
|
"subUpdates",
|
|
"tgBotAPIServer",
|
|
"tgBotBackup",
|
|
"tgBotChatId",
|
|
"tgBotEnable",
|
|
"tgBotLoginNotify",
|
|
"tgBotProxy",
|
|
"tgBotToken",
|
|
"tgCpu",
|
|
"tgLang",
|
|
"tgRunTime",
|
|
"timeLocation",
|
|
"trafficDiff",
|
|
"trustedProxyCIDRs",
|
|
"twoFactorEnable",
|
|
"twoFactorToken",
|
|
"webBasePath",
|
|
"webCertFile",
|
|
"webDomain",
|
|
"webKeyFile",
|
|
"webListen",
|
|
"webPort"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ApiToken": {
|
|
"properties": {
|
|
"createdAt": {
|
|
"type": "integer"
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"token": {
|
|
"description": "SHA-256 hash; the plaintext is shown only once at creation",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"createdAt",
|
|
"enabled",
|
|
"id",
|
|
"name",
|
|
"token"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ApiTokenView": {
|
|
"properties": {
|
|
"createdAt": {
|
|
"example": 1736000000,
|
|
"type": "integer"
|
|
},
|
|
"enabled": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
},
|
|
"id": {
|
|
"example": 2,
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"example": "central-panel-a",
|
|
"type": "string"
|
|
},
|
|
"token": {
|
|
"example": "new-token-string",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"createdAt",
|
|
"enabled",
|
|
"id",
|
|
"name"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Client": {
|
|
"description": "Client represents a client configuration for Xray inbounds with traffic limits and settings.",
|
|
"properties": {
|
|
"auth": {
|
|
"description": "Auth password (Hysteria)",
|
|
"type": "string"
|
|
},
|
|
"comment": {
|
|
"description": "Client comment",
|
|
"type": "string"
|
|
},
|
|
"created_at": {
|
|
"description": "Creation timestamp",
|
|
"type": "integer"
|
|
},
|
|
"email": {
|
|
"description": "Client email identifier",
|
|
"type": "string"
|
|
},
|
|
"enable": {
|
|
"description": "Whether the client is enabled",
|
|
"type": "boolean"
|
|
},
|
|
"expiryTime": {
|
|
"description": "Expiration timestamp",
|
|
"type": "integer"
|
|
},
|
|
"flow": {
|
|
"description": "Flow control (XTLS)",
|
|
"type": "string"
|
|
},
|
|
"group": {
|
|
"description": "Logical grouping label",
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"description": "Unique client identifier",
|
|
"type": "string"
|
|
},
|
|
"limitIp": {
|
|
"description": "IP limit for this client",
|
|
"type": "integer"
|
|
},
|
|
"password": {
|
|
"description": "Client password",
|
|
"type": "string"
|
|
},
|
|
"reset": {
|
|
"description": "Reset period in days",
|
|
"type": "integer"
|
|
},
|
|
"reverse": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ClientReverse"
|
|
}
|
|
],
|
|
"description": "VLESS simple reverse proxy settings",
|
|
"nullable": true
|
|
},
|
|
"security": {
|
|
"description": "Security method (e.g., \"auto\", \"aes-128-gcm\")",
|
|
"type": "string"
|
|
},
|
|
"subId": {
|
|
"description": "Subscription identifier",
|
|
"type": "string"
|
|
},
|
|
"tgId": {
|
|
"description": "Telegram user ID for notifications",
|
|
"type": "integer"
|
|
},
|
|
"totalGB": {
|
|
"description": "Total traffic limit in GB",
|
|
"type": "integer"
|
|
},
|
|
"updated_at": {
|
|
"description": "Last update timestamp",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"comment",
|
|
"email",
|
|
"enable",
|
|
"expiryTime",
|
|
"limitIp",
|
|
"reset",
|
|
"security",
|
|
"subId",
|
|
"tgId",
|
|
"totalGB"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ClientInbound": {
|
|
"properties": {
|
|
"clientId": {
|
|
"type": "integer"
|
|
},
|
|
"createdAt": {
|
|
"type": "integer"
|
|
},
|
|
"flowOverride": {
|
|
"type": "string"
|
|
},
|
|
"inboundId": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"clientId",
|
|
"createdAt",
|
|
"flowOverride",
|
|
"inboundId"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ClientRecord": {
|
|
"properties": {
|
|
"auth": {
|
|
"type": "string"
|
|
},
|
|
"comment": {
|
|
"type": "string"
|
|
},
|
|
"createdAt": {
|
|
"type": "integer"
|
|
},
|
|
"email": {
|
|
"type": "string"
|
|
},
|
|
"enable": {
|
|
"type": "boolean"
|
|
},
|
|
"expiryTime": {
|
|
"type": "integer"
|
|
},
|
|
"flow": {
|
|
"type": "string"
|
|
},
|
|
"group": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"limitIp": {
|
|
"type": "integer"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
},
|
|
"reset": {
|
|
"type": "integer"
|
|
},
|
|
"reverse": {},
|
|
"security": {
|
|
"type": "string"
|
|
},
|
|
"subId": {
|
|
"type": "string"
|
|
},
|
|
"tgId": {
|
|
"type": "integer"
|
|
},
|
|
"totalGB": {
|
|
"type": "integer"
|
|
},
|
|
"updatedAt": {
|
|
"type": "integer"
|
|
},
|
|
"uuid": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"auth",
|
|
"comment",
|
|
"createdAt",
|
|
"email",
|
|
"enable",
|
|
"expiryTime",
|
|
"flow",
|
|
"group",
|
|
"id",
|
|
"limitIp",
|
|
"password",
|
|
"reset",
|
|
"reverse",
|
|
"security",
|
|
"subId",
|
|
"tgId",
|
|
"totalGB",
|
|
"updatedAt",
|
|
"uuid"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ClientReverse": {
|
|
"properties": {
|
|
"tag": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"tag"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ClientTraffic": {
|
|
"description": "ClientTraffic represents traffic statistics and limits for a specific client.\nIt tracks upload/download usage, expiry times, and online status for inbound clients.",
|
|
"properties": {
|
|
"down": {
|
|
"example": 2097152,
|
|
"type": "integer"
|
|
},
|
|
"email": {
|
|
"example": "user1",
|
|
"type": "string"
|
|
},
|
|
"enable": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
},
|
|
"expiryTime": {
|
|
"example": 1735689600000,
|
|
"type": "integer"
|
|
},
|
|
"id": {
|
|
"example": 14825,
|
|
"type": "integer"
|
|
},
|
|
"inboundId": {
|
|
"example": 1,
|
|
"type": "integer"
|
|
},
|
|
"lastOnline": {
|
|
"example": 1735680000000,
|
|
"type": "integer"
|
|
},
|
|
"reset": {
|
|
"example": 0,
|
|
"type": "integer"
|
|
},
|
|
"subId": {
|
|
"example": "i7tvdpeffi0hvvf1",
|
|
"type": "string"
|
|
},
|
|
"total": {
|
|
"example": 10737418240,
|
|
"type": "integer"
|
|
},
|
|
"up": {
|
|
"example": 1048576,
|
|
"type": "integer"
|
|
},
|
|
"uuid": {
|
|
"example": "e18c9a96-71bf-48d4-933f-8b9a46d4290c",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"down",
|
|
"email",
|
|
"enable",
|
|
"expiryTime",
|
|
"id",
|
|
"inboundId",
|
|
"lastOnline",
|
|
"reset",
|
|
"subId",
|
|
"total",
|
|
"up",
|
|
"uuid"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"CustomGeoResource": {
|
|
"properties": {
|
|
"alias": {
|
|
"type": "string"
|
|
},
|
|
"createdAt": {
|
|
"type": "integer"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"lastModified": {
|
|
"type": "string"
|
|
},
|
|
"lastUpdatedAt": {
|
|
"type": "integer"
|
|
},
|
|
"localPath": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"updatedAt": {
|
|
"type": "integer"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"alias",
|
|
"createdAt",
|
|
"id",
|
|
"lastModified",
|
|
"lastUpdatedAt",
|
|
"localPath",
|
|
"type",
|
|
"updatedAt",
|
|
"url"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"FallbackParentInfo": {
|
|
"description": "FallbackParentInfo carries everything the frontend needs to rewrite a\nchild inbound's client link: where to connect (the master's address\nand port) and which path matched on the master's fallbacks array.\nThe frontend already has the master inbound in its dbInbounds list,\nso we only ship identifiers + the match path here.",
|
|
"properties": {
|
|
"masterId": {
|
|
"type": "integer"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"masterId"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"HistoryOfSeeders": {
|
|
"description": "HistoryOfSeeders tracks which database seeders have been executed to prevent re-running.",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"seederName": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"seederName"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Inbound": {
|
|
"description": "Inbound represents an Xray inbound configuration with traffic statistics and settings.",
|
|
"properties": {
|
|
"clientStats": {
|
|
"description": "Client traffic statistics",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ClientTraffic"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"down": {
|
|
"description": "Download traffic in bytes",
|
|
"type": "integer"
|
|
},
|
|
"enable": {
|
|
"description": "Whether the inbound is enabled",
|
|
"example": true,
|
|
"type": "boolean"
|
|
},
|
|
"expiryTime": {
|
|
"description": "Expiration timestamp",
|
|
"type": "integer"
|
|
},
|
|
"fallbackParent": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FallbackParentInfo"
|
|
}
|
|
],
|
|
"description": "FallbackParent is populated by the API layer when this inbound is\nattached as a fallback child of a VLESS/Trojan TCP-TLS master.\nThe frontend uses it to rewrite client-share links so they advertise\nthe master's externally reachable endpoint instead of the child's\nloopback listen. Not persisted.",
|
|
"nullable": true
|
|
},
|
|
"id": {
|
|
"description": "Unique identifier",
|
|
"example": 1,
|
|
"type": "integer"
|
|
},
|
|
"lastTrafficResetTime": {
|
|
"description": "Last traffic reset timestamp",
|
|
"type": "integer"
|
|
},
|
|
"listen": {
|
|
"description": "Xray configuration fields",
|
|
"type": "string"
|
|
},
|
|
"nodeId": {
|
|
"nullable": true,
|
|
"type": "integer"
|
|
},
|
|
"originNodeGuid": {
|
|
"description": "OriginNodeGuid is the panelGuid of the node that physically hosts this\ninbound, propagated up across hops (#4983). Empty for an inbound that\nlives on this panel's own xray; set to the originating node's GUID when\nthe inbound was synced from a node (kept as-is across further hops). Lets\nthe master attribute a deeply nested inbound to the real node instead of\nthe intermediate one it was fetched through.",
|
|
"type": "string"
|
|
},
|
|
"port": {
|
|
"example": 443,
|
|
"maximum": 65535,
|
|
"minimum": 0,
|
|
"type": "integer"
|
|
},
|
|
"protocol": {
|
|
"enum": [
|
|
"vmess",
|
|
"vless",
|
|
"trojan",
|
|
"shadowsocks",
|
|
"wireguard",
|
|
"hysteria",
|
|
"http",
|
|
"mixed",
|
|
"tunnel",
|
|
"tun",
|
|
"mtproto"
|
|
],
|
|
"example": "vless",
|
|
"type": "string"
|
|
},
|
|
"remark": {
|
|
"description": "Human-readable remark",
|
|
"example": "VLESS-443",
|
|
"type": "string"
|
|
},
|
|
"settings": {},
|
|
"sniffing": {},
|
|
"streamSettings": {},
|
|
"tag": {
|
|
"example": "in-443-tcp",
|
|
"type": "string"
|
|
},
|
|
"total": {
|
|
"description": "Total traffic limit in bytes",
|
|
"type": "integer"
|
|
},
|
|
"trafficReset": {
|
|
"description": "Traffic reset schedule",
|
|
"enum": [
|
|
"never",
|
|
"hourly",
|
|
"daily",
|
|
"weekly",
|
|
"monthly"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"up": {
|
|
"description": "Upload traffic in bytes",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"clientStats",
|
|
"down",
|
|
"enable",
|
|
"expiryTime",
|
|
"id",
|
|
"lastTrafficResetTime",
|
|
"listen",
|
|
"port",
|
|
"protocol",
|
|
"remark",
|
|
"settings",
|
|
"sniffing",
|
|
"streamSettings",
|
|
"tag",
|
|
"total",
|
|
"trafficReset",
|
|
"up"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"InboundClientIps": {
|
|
"description": "InboundClientIps stores IP addresses associated with inbound clients for access control.",
|
|
"properties": {
|
|
"clientEmail": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"ips": {}
|
|
},
|
|
"required": [
|
|
"clientEmail",
|
|
"id",
|
|
"ips"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"InboundFallback": {
|
|
"properties": {
|
|
"alpn": {
|
|
"type": "string"
|
|
},
|
|
"childId": {
|
|
"type": "integer"
|
|
},
|
|
"dest": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"masterId": {
|
|
"type": "integer"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
},
|
|
"sortOrder": {
|
|
"type": "integer"
|
|
},
|
|
"xver": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"alpn",
|
|
"childId",
|
|
"dest",
|
|
"id",
|
|
"masterId",
|
|
"name",
|
|
"path",
|
|
"sortOrder",
|
|
"xver"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"InboundOption": {
|
|
"properties": {
|
|
"id": {
|
|
"example": 1,
|
|
"type": "integer"
|
|
},
|
|
"port": {
|
|
"example": 443,
|
|
"type": "integer"
|
|
},
|
|
"protocol": {
|
|
"example": "vless",
|
|
"type": "string"
|
|
},
|
|
"remark": {
|
|
"example": "VLESS-443",
|
|
"type": "string"
|
|
},
|
|
"ssMethod": {
|
|
"type": "string"
|
|
},
|
|
"tag": {
|
|
"example": "in-443-tcp",
|
|
"type": "string"
|
|
},
|
|
"tlsFlowCapable": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"port",
|
|
"protocol",
|
|
"remark",
|
|
"ssMethod",
|
|
"tag",
|
|
"tlsFlowCapable"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Msg": {
|
|
"description": "Msg represents a standard API response message with success status, message text, and optional data object.",
|
|
"properties": {
|
|
"msg": {
|
|
"description": "Response message text",
|
|
"type": "string"
|
|
},
|
|
"obj": {
|
|
"description": "Optional data object"
|
|
},
|
|
"success": {
|
|
"description": "Indicates if the operation was successful",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"msg",
|
|
"obj",
|
|
"success"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Node": {
|
|
"description": "Node represents a remote 3x-ui panel registered with the central panel.\nThe central panel polls each node's existing /panel/api/server/status\nendpoint over HTTP using the per-node ApiToken to populate the runtime\nstatus fields below.",
|
|
"properties": {
|
|
"address": {
|
|
"example": "node1.example.com",
|
|
"type": "string"
|
|
},
|
|
"allowPrivateAddress": {
|
|
"type": "boolean"
|
|
},
|
|
"apiToken": {
|
|
"example": "abcdef0123456789",
|
|
"type": "string"
|
|
},
|
|
"basePath": {
|
|
"example": "/",
|
|
"type": "string"
|
|
},
|
|
"clientCount": {
|
|
"example": 27,
|
|
"type": "integer"
|
|
},
|
|
"configDirty": {
|
|
"type": "boolean"
|
|
},
|
|
"configDirtyAt": {
|
|
"type": "integer"
|
|
},
|
|
"cpuPct": {
|
|
"example": 23.5,
|
|
"type": "number"
|
|
},
|
|
"createdAt": {
|
|
"example": 1700000000,
|
|
"type": "integer"
|
|
},
|
|
"depletedCount": {
|
|
"example": 1,
|
|
"type": "integer"
|
|
},
|
|
"enable": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
},
|
|
"guid": {
|
|
"description": "Guid is the remote panel's stable self-identifier (its panelGuid),\nlearned from each heartbeat. It is the globally stable node identity used\nto attribute online clients/inbounds to the physical node across a chain\nof nodes (#4983); panel-local autoincrement ids don't survive a hop.\nObserved-state only — never user-edited.",
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"example": 1,
|
|
"type": "integer"
|
|
},
|
|
"inboundCount": {
|
|
"example": 5,
|
|
"type": "integer"
|
|
},
|
|
"lastError": {
|
|
"type": "string"
|
|
},
|
|
"lastHeartbeat": {
|
|
"description": "unix seconds, 0 = never",
|
|
"example": 1700000000,
|
|
"type": "integer"
|
|
},
|
|
"latencyMs": {
|
|
"example": 42,
|
|
"type": "integer"
|
|
},
|
|
"memPct": {
|
|
"example": 45.1,
|
|
"type": "number"
|
|
},
|
|
"name": {
|
|
"example": "de-fra-1",
|
|
"type": "string"
|
|
},
|
|
"onlineCount": {
|
|
"example": 3,
|
|
"type": "integer"
|
|
},
|
|
"panelVersion": {
|
|
"example": "v3.x.x",
|
|
"type": "string"
|
|
},
|
|
"parentGuid": {
|
|
"description": "ParentGuid + Transitive are set only when a node is surfaced as part of a\nnode tree (#4983): direct nodes carry the master panel's own GUID, a\ntransitive sub-node carries its parent node's GUID. Transitive nodes are\nread-only projections (Id == 0, not persisted) — never edited or deployed.",
|
|
"type": "string"
|
|
},
|
|
"pinnedCertSha256": {
|
|
"type": "string"
|
|
},
|
|
"port": {
|
|
"example": 2053,
|
|
"maximum": 65535,
|
|
"minimum": 1,
|
|
"type": "integer"
|
|
},
|
|
"remark": {
|
|
"type": "string"
|
|
},
|
|
"scheme": {
|
|
"enum": [
|
|
"http",
|
|
"https"
|
|
],
|
|
"example": "https",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"description": "Heartbeat-updated fields. UpdatedAt advances on every probe even when\nthe row is otherwise unchanged so the UI's \"last seen\" tooltip is\ntruthful without us having to read LastHeartbeat separately.\nonline|offline|unknown",
|
|
"example": "online",
|
|
"type": "string"
|
|
},
|
|
"tlsVerifyMode": {
|
|
"enum": [
|
|
"verify",
|
|
"skip",
|
|
"pin"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"transitive": {
|
|
"type": "boolean"
|
|
},
|
|
"updatedAt": {
|
|
"example": 1700000000,
|
|
"type": "integer"
|
|
},
|
|
"uptimeSecs": {
|
|
"example": 86400,
|
|
"type": "integer"
|
|
},
|
|
"xrayVersion": {
|
|
"example": "25.10.31",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"allowPrivateAddress",
|
|
"apiToken",
|
|
"basePath",
|
|
"clientCount",
|
|
"configDirty",
|
|
"configDirtyAt",
|
|
"cpuPct",
|
|
"createdAt",
|
|
"depletedCount",
|
|
"enable",
|
|
"guid",
|
|
"id",
|
|
"inboundCount",
|
|
"lastError",
|
|
"lastHeartbeat",
|
|
"latencyMs",
|
|
"memPct",
|
|
"name",
|
|
"onlineCount",
|
|
"panelVersion",
|
|
"pinnedCertSha256",
|
|
"port",
|
|
"remark",
|
|
"scheme",
|
|
"status",
|
|
"tlsVerifyMode",
|
|
"updatedAt",
|
|
"uptimeSecs",
|
|
"xrayVersion"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"OutboundTraffics": {
|
|
"description": "OutboundTraffics tracks traffic statistics for Xray outbound connections.",
|
|
"properties": {
|
|
"down": {
|
|
"type": "integer"
|
|
},
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"tag": {
|
|
"type": "string"
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"up": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"required": [
|
|
"down",
|
|
"id",
|
|
"tag",
|
|
"total",
|
|
"up"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ProbeResultUI": {
|
|
"properties": {
|
|
"cpuPct": {
|
|
"example": 12.5,
|
|
"type": "number"
|
|
},
|
|
"error": {
|
|
"type": "string"
|
|
},
|
|
"latencyMs": {
|
|
"example": 42,
|
|
"type": "integer"
|
|
},
|
|
"memPct": {
|
|
"example": 45.2,
|
|
"type": "number"
|
|
},
|
|
"panelVersion": {
|
|
"example": "v3.x.x",
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"example": "online",
|
|
"type": "string"
|
|
},
|
|
"uptimeSecs": {
|
|
"example": 86400,
|
|
"type": "integer"
|
|
},
|
|
"xrayVersion": {
|
|
"example": "25.10.31",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"cpuPct",
|
|
"error",
|
|
"latencyMs",
|
|
"memPct",
|
|
"panelVersion",
|
|
"status",
|
|
"uptimeSecs",
|
|
"xrayVersion"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"Setting": {
|
|
"description": "Setting stores key-value configuration settings for the 3x-ui panel.",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"key",
|
|
"value"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"User": {
|
|
"description": "User represents a user account in the 3x-ui panel.",
|
|
"properties": {
|
|
"id": {
|
|
"type": "integer"
|
|
},
|
|
"password": {
|
|
"type": "string"
|
|
},
|
|
"username": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"password",
|
|
"username"
|
|
],
|
|
"type": "object"
|
|
}
|
|
};
|