|
@@ -0,0 +1,1785 @@
|
|
|
|
|
+// 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"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "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"
|
|
|
|
|
+ }
|
|
|
|
|
+};
|