#3 .content: drop max-width:1460px centering, padding 24px full width (3x-ui content-area parity), 8px under the 760px breakpoint. #5 servers page: remove latency column + average-latency stat cell (stats grid 4->3, table 15->14 cols incl. detail colspan/empty row). #6 icon buttons: native title replaced by data-tip with a 3x-ui style bubble (black/white, rounded, arrow, body-level fixed layer so table scroll containers cannot clip it); customer QR tip renamed to 二维码; covers customers/servers/nodes rows, credentials pane, links pane, address eye toggle, drag grip, filter chip clear, logout, modal close. #9 remove decorative topbar avatar span#avatar, its showApp assignment and the dead .avatar CSS rule. Refresh button untouched. Golden re-captured: sole diff was errors.badSubscription body (the SPA index.html served there) reflecting the avatar/data-tip changes.
3492 lines
122 KiB
JSON
3492 lines
122 KiB
JSON
{
|
|
"meta": {
|
|
"capturedAt": "2026-10-20T20:52:29.987Z",
|
|
"note": "Go panel golden baseline; see README.md in this directory."
|
|
},
|
|
"sections": {
|
|
"login": {
|
|
"body": {
|
|
"csrf": "<csrf>#1",
|
|
"user": {
|
|
"id": "<usr>#1",
|
|
"role": "owner",
|
|
"username": "admin"
|
|
}
|
|
},
|
|
"status": 200
|
|
},
|
|
"session": {
|
|
"body": {
|
|
"authenticated": true,
|
|
"csrf": "<csrf>#1",
|
|
"user": {
|
|
"id": "<usr>#1",
|
|
"role": "owner",
|
|
"username": "admin"
|
|
}
|
|
},
|
|
"status": 200
|
|
},
|
|
"heartbeatSeedAgents": {
|
|
"entry": {
|
|
"body": {
|
|
"ok": true,
|
|
"serverTime": "<ts>"
|
|
},
|
|
"status": 200
|
|
},
|
|
"exit": {
|
|
"body": {
|
|
"ok": true,
|
|
"serverTime": "<ts>"
|
|
},
|
|
"status": 200
|
|
}
|
|
},
|
|
"lists": {
|
|
"customers": {
|
|
"body": {
|
|
"customers": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#1",
|
|
"ipLimit": 0,
|
|
"lastActiveAt": null,
|
|
"lastUsageAt": "<ts>",
|
|
"name": "Alice",
|
|
"notes": "",
|
|
"observedIpCount": 0,
|
|
"online": false,
|
|
"serverUsage": {
|
|
"srv:<srv>#1": {
|
|
"usageCounters": {
|
|
"downlink": 2000,
|
|
"epoch": "diff-epoch-1",
|
|
"uplink": 1000
|
|
}
|
|
}
|
|
},
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"subscriptionClientCount": 3,
|
|
"subscriptionToken": "<subtoken>#1",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 3000,
|
|
"usedDownlinkBytes": 2000,
|
|
"usedUplinkBytes": 1000
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 2,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#2",
|
|
"ipLimit": 5,
|
|
"lastActiveAt": null,
|
|
"name": "Bob",
|
|
"notes": "",
|
|
"observedIpCount": 0,
|
|
"online": false,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"subscriptionClientCount": 0,
|
|
"subscriptionToken": "<subtoken>#2",
|
|
"tags": [],
|
|
"trafficLimitBytes": 1073741824,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"jobs": {
|
|
"body": {
|
|
"jobs": [
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#1",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#1",
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#2",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"serverId": "<srv>#2",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#3",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"nodes": {
|
|
"body": {
|
|
"nodeClients": [
|
|
{
|
|
"clientUri": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=45584502b5567121&type=tcp&headerType=none&flow=xtls-rprx-vision#N1",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#1",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "vless://<uuid>#2@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=0adf5e3d9a002211&type=tcp&headerType=none&flow=xtls-rprx-vision#N1",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#2",
|
|
"id": "<ncl>#2",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "ss://<ssblob>#1@entry.example.com:<port>#3#N2",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#3",
|
|
"nodeId": "<nod>#1",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#1"
|
|
},
|
|
"autoRemoving": false,
|
|
"clientCount": 2,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": "<port>#1",
|
|
"exitPortMode": "random",
|
|
"exitProtocol": "shadowsocks-2022-aes256",
|
|
"exitReady": true,
|
|
"exitResourceId": "<res>#1",
|
|
"exitServerId": "<srv>#2",
|
|
"id": "<nod>#2",
|
|
"lastUsageAt": "<ts>",
|
|
"meteredTraffic": {
|
|
"downlink": 5000,
|
|
"uplink": 4000
|
|
},
|
|
"name": "N1",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#2",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality-vision",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#2",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#2",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 0,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "forward",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": {
|
|
"downlink": 5000,
|
|
"epoch": "diff-epoch-1",
|
|
"uplink": 4000
|
|
},
|
|
"wsPath": "<secret>#1"
|
|
},
|
|
{
|
|
"artifacts": {},
|
|
"autoRemoving": false,
|
|
"clientCount": 1,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#3",
|
|
"exitServerId": null,
|
|
"id": "<nod>#1",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N2",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#3",
|
|
"portMode": "random",
|
|
"protocol": "shadowsocks-2022-aes128",
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.tesla.com",
|
|
"resourceId": "<res>#4",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 1,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#2"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"overview": {
|
|
"body": {
|
|
"activity": [
|
|
{
|
|
"action": "deploy_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N2"
|
|
},
|
|
"id": "<evt>#1",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "deploy_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N1"
|
|
},
|
|
"id": "<evt>#2",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Alice",
|
|
"customerId": "<cus>#1"
|
|
},
|
|
"id": "<evt>#3",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Bob",
|
|
"customerId": "<cus>#2"
|
|
},
|
|
"id": "<evt>#4",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Alice",
|
|
"customerId": "<cus>#1"
|
|
},
|
|
"id": "<evt>#5",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "create_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N2"
|
|
},
|
|
"id": "<evt>#6",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "create_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N1"
|
|
},
|
|
"id": "<evt>#7",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "create_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Bob"
|
|
},
|
|
"id": "<evt>#8",
|
|
"target": "<cus>#2"
|
|
},
|
|
{
|
|
"action": "create_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Alice"
|
|
},
|
|
"id": "<evt>#9",
|
|
"target": "<cus>#1"
|
|
},
|
|
{
|
|
"action": "reconcile_server",
|
|
"actor": "agent:<agt>#1",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"nodes": 0
|
|
},
|
|
"id": "<evt>#10",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "enroll_agent",
|
|
"actor": "agent:<agt>#1",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#11",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "create_enrollment",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#12",
|
|
"target": "<srv>#2"
|
|
}
|
|
],
|
|
"counts": {
|
|
"activeNodes": 2,
|
|
"customers": 2,
|
|
"nodes": 2,
|
|
"online": 2,
|
|
"queuedJobs": 0,
|
|
"servers": 2
|
|
},
|
|
"degraded": [],
|
|
"version": "0.6.8"
|
|
},
|
|
"status": 200
|
|
},
|
|
"servers": {
|
|
"body": {
|
|
"servers": [
|
|
{
|
|
"agentVersion": "0.6.8",
|
|
"createdAt": "<ts>",
|
|
"enabled": true,
|
|
"engine": null,
|
|
"id": "<srv>#1",
|
|
"labels": [],
|
|
"lastSeenAt": "<ts>",
|
|
"name": "Entry",
|
|
"pendingCleanup": 0,
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "entry.example.com",
|
|
"publicAddressV6": "v6.example.com",
|
|
"region": "",
|
|
"role": "relay",
|
|
"status": "online",
|
|
"system": {},
|
|
"tlsDomain": "tls.example.com",
|
|
"updatedAt": "<ts>",
|
|
"usage": {
|
|
"error": null,
|
|
"lastReportAt": "<ts>",
|
|
"sampleCount": 2
|
|
}
|
|
},
|
|
{
|
|
"agentVersion": "0.6.8",
|
|
"createdAt": "<ts>",
|
|
"enabled": true,
|
|
"engine": null,
|
|
"id": "<srv>#2",
|
|
"labels": [],
|
|
"lastSeenAt": "<ts>",
|
|
"name": "Exit",
|
|
"pendingCleanup": 0,
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "exit.example.com",
|
|
"publicAddressV6": "",
|
|
"region": "",
|
|
"role": "exit",
|
|
"status": "online",
|
|
"system": {},
|
|
"tlsDomain": "",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
}
|
|
},
|
|
"credentials": {
|
|
"alice": {
|
|
"body": {
|
|
"customerId": "<cus>#1",
|
|
"items": [
|
|
{
|
|
"clientId": "<uuid>#1",
|
|
"nodeClientId": "<ncl>#1",
|
|
"nodeId": "<nod>#2",
|
|
"nodeName": "N1",
|
|
"password": "<secret>#3",
|
|
"protocol": "vless-reality-vision",
|
|
"shortId": "<secret>#4",
|
|
"status": "active",
|
|
"username": ""
|
|
},
|
|
{
|
|
"clientId": "<uuid>#3",
|
|
"nodeClientId": "<ncl>#3",
|
|
"nodeId": "<nod>#1",
|
|
"nodeName": "N2",
|
|
"password": "<secret>#5",
|
|
"protocol": "shadowsocks-2022-aes128",
|
|
"shortId": "<secret>#6",
|
|
"status": "active",
|
|
"username": ""
|
|
}
|
|
],
|
|
"subscriptionToken": "<subtoken>#1"
|
|
},
|
|
"status": 200
|
|
},
|
|
"bob": {
|
|
"body": {
|
|
"customerId": "<cus>#2",
|
|
"items": [
|
|
{
|
|
"clientId": "<uuid>#2",
|
|
"nodeClientId": "<ncl>#2",
|
|
"nodeId": "<nod>#2",
|
|
"nodeName": "N1",
|
|
"password": "<secret>#7",
|
|
"protocol": "vless-reality-vision",
|
|
"shortId": "<secret>#8",
|
|
"status": "active",
|
|
"username": ""
|
|
}
|
|
],
|
|
"subscriptionToken": "<subtoken>#2"
|
|
},
|
|
"status": 200
|
|
}
|
|
},
|
|
"subscriptionsSeed": {
|
|
"alice": {
|
|
"auto-clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#1\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#4\"\n flow: \"xtls-rprx-vision\"\n - name: \"N2\"\n server: \"entry.example.com\"\n port: <port>#3\n type: \"ss\"\n cipher: \"2022-blake3-aes-128-gcm\"\n password: \"xOcB7XGgo6VpaEHZfNXrlQ==:<secret>#5\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N1\"\n - \"N2\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"auto-generic": {
|
|
"body": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#4&type=tcp&headerType=none&flow=xtls-rprx-vision#N1\nss://<ssblob>#1@entry.example.com:<port>#3#N2\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"base64": {
|
|
"body": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#4&type=tcp&headerType=none&flow=xtls-rprx-vision#N1\nss://<ssblob>#1@entry.example.com:<port>#3#N2\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#1\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#4\"\n flow: \"xtls-rprx-vision\"\n - name: \"N2\"\n server: \"entry.example.com\"\n port: <port>#3\n type: \"ss\"\n cipher: \"2022-blake3-aes-128-gcm\"\n password: \"xOcB7XGgo6VpaEHZfNXrlQ==:<secret>#5\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N1\"\n - \"N2\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"clash-smart": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#1\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#4\"\n flow: \"xtls-rprx-vision\"\n - name: \"N2\"\n server: \"entry.example.com\"\n port: <port>#3\n type: \"ss\"\n cipher: \"2022-blake3-aes-128-gcm\"\n password: \"xOcB7XGgo6VpaEHZfNXrlQ==:<secret>#5\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"自动选择\"\n - \"N1\"\n - \"N2\"\n - \"DIRECT\"\n - name: \"自动选择\"\n type: url-test\n url: \"https://www.gstatic.com/generate_204\"\n interval: 300\n tolerance: 80\n proxies:\n - \"N1\"\n - \"N2\"\n - name: \"流媒体\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\n - \"N2\"\n - name: \"AI 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\n - \"N2\"\n - name: \"Meta 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\n - \"N2\"\nrules:\n - \"GEOSITE,category-ads-all,REJECT\"\n - \"GEOSITE,private,DIRECT\"\n - \"GEOSITE,openai,AI 服务\"\n - \"GEOSITE,netflix,流媒体\"\n - \"GEOSITE,facebook,Meta 服务\"\n - \"DOMAIN-SUFFIX,fbcdn.net,Meta 服务\"\n - \"DOMAIN-SUFFIX,instagram.com,Meta 服务\"\n - \"DOMAIN-SUFFIX,whatsapp.net,Meta 服务\"\n - \"GEOSITE,geolocation-!cn,节点选择\"\n - \"GEOSITE,cn,DIRECT\"\n - \"GEOIP,CN,DIRECT\"\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"raw": {
|
|
"body": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#4&type=tcp&headerType=none&flow=xtls-rprx-vision#N1\nss://<ssblob>#1@entry.example.com:<port>#3#N2\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"singbox": {
|
|
"body": "{\n \"log\": {\n \"level\": \"warn\"\n },\n \"inbounds\": [\n {\n \"type\": \"mixed\",\n \"tag\": \"local\",\n \"listen\": \"127.0.0.1\",\n \"listen_port\": 2080\n }\n ],\n \"outbounds\": [\n {\n \"type\": \"selector\",\n \"tag\": \"proxy\",\n \"outbounds\": [\n \"node-1\",\n \"node-2\"\n ]\n },\n {\n \"type\": \"vless\",\n \"tag\": \"node-1\",\n \"server\": \"entry.example.com\",\n \"server_port\": <port>#2,\n \"uuid\": \"<uuid>#1\",\n \"flow\": \"xtls-rprx-vision\",\n \"tls\": {\n \"enabled\": true,\n \"server_name\": \"www.amd.com\",\n \"reality\": {\n \"enabled\": true,\n \"public_key\": \"<rpub>#1\",\n \"short_id\": \"<secret>#4\"\n }\n }\n },\n {\n \"type\": \"shadowsocks\",\n \"tag\": \"node-2\",\n \"server\": \"entry.example.com\",\n \"server_port\": <port>#3,\n \"method\": \"2022-blake3-aes-128-gcm\",\n \"password\": \"xOcB7XGgo6VpaEHZfNXrlQ==:<secret>#5\"\n },\n {\n \"type\": \"direct\",\n \"tag\": \"direct\"\n }\n ],\n \"route\": {\n \"final\": \"proxy\"\n }\n}\n",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
},
|
|
"surge": {
|
|
"body": "[General]\nloglevel = notify\n[Proxy]\nN2 = ss, entry.example.com, <port>#3, encrypt-method=2022-blake3-aes-128-gcm, password=xOcB7XGgo6VpaEHZfNXrlQ__:<secret>#5VgHuXw__\n[Proxy Group]\n节点选择 = select, N2, DIRECT\n自动选择 = url-test, N2, url=http://www.gstatic.com/generate_204, interval=600\n[Rule]\nGEOIP,CN,DIRECT\nFINAL,节点选择\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=1000; download=2000; total=0; expire=0"
|
|
}
|
|
},
|
|
"bob": {
|
|
"auto-clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#2\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#8\"\n flow: \"xtls-rprx-vision\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N1\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"auto-generic": {
|
|
"body": "{\"message\":\"订阅客户端数达到上限。可在客户访问记录中检查并重置观察窗口。\"}",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 429,
|
|
"userinfo": ""
|
|
},
|
|
"base64": {
|
|
"body": "vless://<uuid>#2@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#8&type=tcp&headerType=none&flow=xtls-rprx-vision#N1\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#2\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#8\"\n flow: \"xtls-rprx-vision\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N1\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"clash-smart": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N1\"\n server: \"entry.example.com\"\n port: <port>#2\n type: \"vless\"\n uuid: \"<uuid>#2\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#1\"\n short-id: \"<secret>#8\"\n flow: \"xtls-rprx-vision\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"自动选择\"\n - \"N1\"\n - \"DIRECT\"\n - name: \"自动选择\"\n type: url-test\n url: \"https://www.gstatic.com/generate_204\"\n interval: 300\n tolerance: 80\n proxies:\n - \"N1\"\n - name: \"流媒体\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\n - name: \"AI 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\n - name: \"Meta 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N1\"\nrules:\n - \"GEOSITE,category-ads-all,REJECT\"\n - \"GEOSITE,private,DIRECT\"\n - \"GEOSITE,openai,AI 服务\"\n - \"GEOSITE,netflix,流媒体\"\n - \"GEOSITE,facebook,Meta 服务\"\n - \"DOMAIN-SUFFIX,fbcdn.net,Meta 服务\"\n - \"DOMAIN-SUFFIX,instagram.com,Meta 服务\"\n - \"DOMAIN-SUFFIX,whatsapp.net,Meta 服务\"\n - \"GEOSITE,geolocation-!cn,节点选择\"\n - \"GEOSITE,cn,DIRECT\"\n - \"GEOIP,CN,DIRECT\"\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"raw": {
|
|
"body": "vless://<uuid>#2@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#8&type=tcp&headerType=none&flow=xtls-rprx-vision#N1\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"singbox": {
|
|
"body": "{\n \"log\": {\n \"level\": \"warn\"\n },\n \"inbounds\": [\n {\n \"type\": \"mixed\",\n \"tag\": \"local\",\n \"listen\": \"127.0.0.1\",\n \"listen_port\": 2080\n }\n ],\n \"outbounds\": [\n {\n \"type\": \"selector\",\n \"tag\": \"proxy\",\n \"outbounds\": [\n \"node-1\"\n ]\n },\n {\n \"type\": \"vless\",\n \"tag\": \"node-1\",\n \"server\": \"entry.example.com\",\n \"server_port\": <port>#2,\n \"uuid\": \"<uuid>#2\",\n \"flow\": \"xtls-rprx-vision\",\n \"tls\": {\n \"enabled\": true,\n \"server_name\": \"www.amd.com\",\n \"reality\": {\n \"enabled\": true,\n \"public_key\": \"<rpub>#1\",\n \"short_id\": \"<secret>#8\"\n }\n }\n },\n {\n \"type\": \"direct\",\n \"tag\": \"direct\"\n }\n ],\n \"route\": {\n \"final\": \"proxy\"\n }\n}\n",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=1073741824; expire=0"
|
|
},
|
|
"surge": {
|
|
"body": "{\"message\":\"当前没有部署成功的入口节点,请在“转发与节点”部署节点\"}",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 503,
|
|
"userinfo": ""
|
|
}
|
|
}
|
|
},
|
|
"createServerS3": {
|
|
"body": {
|
|
"server": {
|
|
"createdAt": "<ts>",
|
|
"enabled": true,
|
|
"id": "<srv>#3",
|
|
"labels": [],
|
|
"name": "S3",
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "s3.example.com",
|
|
"publicAddressV6": "",
|
|
"region": "",
|
|
"role": "relay",
|
|
"status": "pending",
|
|
"tlsDomain": "",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"status": 201
|
|
},
|
|
"enrollS3": {
|
|
"enroll": {
|
|
"body": {
|
|
"agentId": "<agt>#2",
|
|
"agentKey": "<agentkey>#1",
|
|
"reconciled": 0,
|
|
"serverId": "<srv>#3",
|
|
"serverName": "S3"
|
|
},
|
|
"status": 201
|
|
},
|
|
"ticket": {
|
|
"body": {
|
|
"expiresAt": "<ts>",
|
|
"token": "<enrolltoken>#1"
|
|
},
|
|
"status": 201
|
|
}
|
|
},
|
|
"createCarol": {
|
|
"body": {
|
|
"customer": {
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#3",
|
|
"ipLimit": 0,
|
|
"name": "Carol",
|
|
"notes": "",
|
|
"status": "active",
|
|
"subscriptionToken": "<subtoken>#3",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
}
|
|
},
|
|
"status": 201
|
|
},
|
|
"createNodeN3": {
|
|
"body": {
|
|
"node": {
|
|
"artifacts": {},
|
|
"createdAt": "<ts>",
|
|
"entryReady": false,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#5",
|
|
"exitServerId": null,
|
|
"id": "<nod>#3",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N3",
|
|
"networkMode": "ipv4",
|
|
"pendingDelete": false,
|
|
"port": "<port>#4",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#3",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#6",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#3",
|
|
"sortIndex": 2,
|
|
"status": "draft",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#9"
|
|
}
|
|
},
|
|
"status": 201
|
|
},
|
|
"assignN3": {
|
|
"body": {
|
|
"nodeClient": {
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#3",
|
|
"id": "<ncl>#4",
|
|
"nodeId": "<nod>#3",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"status": 200
|
|
},
|
|
"deployN3": {
|
|
"body": {
|
|
"ok": true
|
|
},
|
|
"status": 202
|
|
},
|
|
"deployN3Jobs": [
|
|
{
|
|
"complete": {
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#4",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#3",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#3": {
|
|
"privateKey": "<rpriv>#1",
|
|
"publicKey": "<rpub>#2"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#6",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.63",
|
|
"listen_port": "<port>#4",
|
|
"tag": "ng-<nod>#3-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#3}",
|
|
"short_id": [
|
|
"<secret>#10"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"name": "ng:<cus>#3",
|
|
"uuid": "<uuid>#4"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#3-in",
|
|
"nodeId": "<nod>#3",
|
|
"protocol": "vless-reality"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#3-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#3-in"
|
|
],
|
|
"outbound": "ng-<nod>#3-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#3",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#4",
|
|
"leaseUntil": "<ts>",
|
|
"nodeId": "<nod>#3",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#3": {
|
|
"privateKey": "<rpriv>#1",
|
|
"publicKey": "<rpub>#2"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#6",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.63",
|
|
"listen_port": "<port>#4",
|
|
"tag": "ng-<nod>#3-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#3}",
|
|
"short_id": [
|
|
"<secret>#10"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"name": "ng:<cus>#3",
|
|
"uuid": "<uuid>#4"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#3-in",
|
|
"nodeId": "<nod>#3",
|
|
"protocol": "vless-reality"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#3-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#3-in"
|
|
],
|
|
"outbound": "ng-<nod>#3-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#3",
|
|
"startedAt": "<ts>",
|
|
"status": "running",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
}
|
|
],
|
|
"nodesAfterDeploy": {
|
|
"body": {
|
|
"nodeClients": [
|
|
{
|
|
"clientUri": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#4&type=tcp&headerType=none&flow=xtls-rprx-vision#N1",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#1",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "vless://<uuid>#2@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#8&type=tcp&headerType=none&flow=xtls-rprx-vision#N1",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#2",
|
|
"id": "<ncl>#2",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "ss://<ssblob>#1@entry.example.com:<port>#3#N2",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#3",
|
|
"nodeId": "<nod>#1",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "vless://<uuid>#4@s3.example.com:<port>#4?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#2&sid=<secret>#10&type=tcp&headerType=none#N3",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#3",
|
|
"id": "<ncl>#4",
|
|
"nodeId": "<nod>#3",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#1"
|
|
},
|
|
"autoRemoving": false,
|
|
"clientCount": 2,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": "<port>#1",
|
|
"exitPortMode": "random",
|
|
"exitProtocol": "shadowsocks-2022-aes256",
|
|
"exitReady": true,
|
|
"exitResourceId": "<res>#1",
|
|
"exitServerId": "<srv>#2",
|
|
"id": "<nod>#2",
|
|
"lastUsageAt": "<ts>",
|
|
"meteredTraffic": {
|
|
"downlink": 5000,
|
|
"uplink": 4000
|
|
},
|
|
"name": "N1",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#2",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality-vision",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#2",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#2",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 0,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "forward",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": {
|
|
"downlink": 5000,
|
|
"epoch": "diff-epoch-1",
|
|
"uplink": 4000
|
|
},
|
|
"wsPath": "<secret>#1"
|
|
},
|
|
{
|
|
"artifacts": {},
|
|
"autoRemoving": false,
|
|
"clientCount": 1,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#3",
|
|
"exitServerId": null,
|
|
"id": "<nod>#1",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N2",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#3",
|
|
"portMode": "random",
|
|
"protocol": "shadowsocks-2022-aes128",
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.tesla.com",
|
|
"resourceId": "<res>#4",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 1,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#2"
|
|
},
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#2"
|
|
},
|
|
"autoRemoving": false,
|
|
"clientCount": 1,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#5",
|
|
"exitServerId": null,
|
|
"id": "<nod>#3",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N3",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#4",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#3",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#6",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#3",
|
|
"sortIndex": 2,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#9"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"carolSubscriptions": {
|
|
"auto-clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N3\"\n server: \"s3.example.com\"\n port: <port>#4\n type: \"vless\"\n uuid: \"<uuid>#4\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#2\"\n short-id: \"<secret>#10\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N3\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"auto-generic": {
|
|
"body": "vless://<uuid>#4@s3.example.com:<port>#4?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#2&sid=<secret>#10&type=tcp&headerType=none#N3\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"base64": {
|
|
"body": "vless://<uuid>#4@s3.example.com:<port>#4?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#2&sid=<secret>#10&type=tcp&headerType=none#N3\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"clash": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N3\"\n server: \"s3.example.com\"\n port: <port>#4\n type: \"vless\"\n uuid: \"<uuid>#4\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#2\"\n short-id: \"<secret>#10\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"N3\"\nrules:\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"clash-smart": {
|
|
"body": "mixed-port: 7890\nallow-lan: false\nmode: rule\nproxies:\n - name: \"N3\"\n server: \"s3.example.com\"\n port: <port>#4\n type: \"vless\"\n uuid: \"<uuid>#4\"\n tls: true\n network: \"tcp\"\n servername: \"www.amd.com\"\n client-fingerprint: \"chrome\"\n reality-opts: \n public-key: \"<rpub>#2\"\n short-id: \"<secret>#10\"\nproxy-groups:\n - name: \"节点选择\"\n type: select\n proxies:\n - \"自动选择\"\n - \"N3\"\n - \"DIRECT\"\n - name: \"自动选择\"\n type: url-test\n url: \"https://www.gstatic.com/generate_204\"\n interval: 300\n tolerance: 80\n proxies:\n - \"N3\"\n - name: \"流媒体\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N3\"\n - name: \"AI 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N3\"\n - name: \"Meta 服务\"\n type: select\n proxies:\n - \"节点选择\"\n - \"自动选择\"\n - \"N3\"\nrules:\n - \"GEOSITE,category-ads-all,REJECT\"\n - \"GEOSITE,private,DIRECT\"\n - \"GEOSITE,openai,AI 服务\"\n - \"GEOSITE,netflix,流媒体\"\n - \"GEOSITE,facebook,Meta 服务\"\n - \"DOMAIN-SUFFIX,fbcdn.net,Meta 服务\"\n - \"DOMAIN-SUFFIX,instagram.com,Meta 服务\"\n - \"DOMAIN-SUFFIX,whatsapp.net,Meta 服务\"\n - \"GEOSITE,geolocation-!cn,节点选择\"\n - \"GEOSITE,cn,DIRECT\"\n - \"GEOIP,CN,DIRECT\"\n - \"MATCH,节点选择\"\n",
|
|
"contentType": "text/yaml; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"raw": {
|
|
"body": "vless://<uuid>#4@s3.example.com:<port>#4?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#2&sid=<secret>#10&type=tcp&headerType=none#N3\n",
|
|
"contentType": "text/plain; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"singbox": {
|
|
"body": "{\n \"log\": {\n \"level\": \"warn\"\n },\n \"inbounds\": [\n {\n \"type\": \"mixed\",\n \"tag\": \"local\",\n \"listen\": \"127.0.0.1\",\n \"listen_port\": 2080\n }\n ],\n \"outbounds\": [\n {\n \"type\": \"selector\",\n \"tag\": \"proxy\",\n \"outbounds\": [\n \"node-1\"\n ]\n },\n {\n \"type\": \"vless\",\n \"tag\": \"node-1\",\n \"server\": \"s3.example.com\",\n \"server_port\": <port>#4,\n \"uuid\": \"<uuid>#4\",\n \"tls\": {\n \"enabled\": true,\n \"server_name\": \"www.amd.com\",\n \"reality\": {\n \"enabled\": true,\n \"public_key\": \"<rpub>#2\",\n \"short_id\": \"<secret>#10\"\n }\n }\n },\n {\n \"type\": \"direct\",\n \"tag\": \"direct\"\n }\n ],\n \"route\": {\n \"final\": \"proxy\"\n }\n}\n",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 200,
|
|
"userinfo": "upload=0; download=0; total=0; expire=0"
|
|
},
|
|
"surge": {
|
|
"body": "{\"message\":\"当前没有部署成功的入口节点,请在“转发与节点”部署节点\"}",
|
|
"contentType": "application/json; charset=utf-8",
|
|
"status": 503,
|
|
"userinfo": ""
|
|
}
|
|
},
|
|
"usageReport1": {
|
|
"body": {
|
|
"ok": true
|
|
},
|
|
"status": 200
|
|
},
|
|
"usageReport2": {
|
|
"body": {
|
|
"ok": true
|
|
},
|
|
"status": 200
|
|
},
|
|
"presenceProjection": {
|
|
"customers": [
|
|
{
|
|
"name": "Alice",
|
|
"online": true,
|
|
"speedPositive": true,
|
|
"hasLastActiveAt": true
|
|
},
|
|
{
|
|
"name": "Bob",
|
|
"online": false,
|
|
"speedPositive": false,
|
|
"hasLastActiveAt": false
|
|
},
|
|
{
|
|
"name": "Carol",
|
|
"online": false,
|
|
"speedPositive": false,
|
|
"hasLastActiveAt": false
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"name": "N1",
|
|
"clientCount": 2,
|
|
"onlineCount": 1,
|
|
"onlineNames": [
|
|
"Alice"
|
|
],
|
|
"speedPositive": true
|
|
},
|
|
{
|
|
"name": "N2",
|
|
"clientCount": 1,
|
|
"onlineCount": 1,
|
|
"onlineNames": [
|
|
"Alice"
|
|
],
|
|
"speedPositive": false
|
|
},
|
|
{
|
|
"name": "N3",
|
|
"clientCount": 1,
|
|
"onlineCount": 0,
|
|
"onlineNames": [],
|
|
"speedPositive": false
|
|
}
|
|
]
|
|
},
|
|
"customersAfterUsage": {
|
|
"body": {
|
|
"customers": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#1",
|
|
"ipLimit": 0,
|
|
"lastActiveAt": "<ts>",
|
|
"lastOnlineAt": "<ts>",
|
|
"lastUsageAt": "<ts>",
|
|
"name": "Alice",
|
|
"notes": "",
|
|
"observedIpCount": 0,
|
|
"online": true,
|
|
"serverUsage": {
|
|
"srv:<srv>#1": {
|
|
"lastActiveAt": "<ts>",
|
|
"lastSampleAt": "<ts>",
|
|
"retiredUsageEpochs": [
|
|
"diff-epoch-1"
|
|
],
|
|
"speedAt": "<ts>",
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"usageCounters": {
|
|
"downlink": 6300,
|
|
"epoch": "golden-epoch-1",
|
|
"uplink": 4500
|
|
}
|
|
}
|
|
},
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"status": "active",
|
|
"subscriptionClientCount": 3,
|
|
"subscriptionToken": "<subtoken>#1",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 13800,
|
|
"usedDownlinkBytes": 8300,
|
|
"usedUplinkBytes": 5500
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 2,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#2",
|
|
"ipLimit": 5,
|
|
"lastActiveAt": null,
|
|
"name": "Bob",
|
|
"notes": "",
|
|
"observedIpCount": 0,
|
|
"online": false,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"subscriptionClientCount": 2,
|
|
"subscriptionToken": "<subtoken>#2",
|
|
"tags": [],
|
|
"trafficLimitBytes": 1073741824,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#3",
|
|
"ipLimit": 0,
|
|
"lastActiveAt": null,
|
|
"name": "Carol",
|
|
"notes": "",
|
|
"observedIpCount": 0,
|
|
"online": false,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"subscriptionClientCount": 3,
|
|
"subscriptionToken": "<subtoken>#3",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"nodePatchUiStyle": {
|
|
"body": {
|
|
"node": {
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#1"
|
|
},
|
|
"autoRemoving": false,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": "<port>#1",
|
|
"exitPortMode": "random",
|
|
"exitProtocol": "shadowsocks-2022-aes256",
|
|
"exitReady": true,
|
|
"exitResourceId": "<res>#1",
|
|
"exitServerId": "<srv>#2",
|
|
"id": "<nod>#2",
|
|
"lastActiveAt": "<ts>",
|
|
"lastSampleAt": "<ts>",
|
|
"lastUsageAt": "<ts>",
|
|
"meteredTraffic": {
|
|
"downlink": 14000,
|
|
"uplink": 12000
|
|
},
|
|
"name": "N1-renamed",
|
|
"networkMode": "ipv4",
|
|
"pendingDelete": false,
|
|
"port": "<port>#2",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality-vision",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#2",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#2",
|
|
"retiredUsageEpochs": [
|
|
"diff-epoch-1"
|
|
],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 0,
|
|
"speedAt": "<ts>",
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"status": "deploying",
|
|
"topology": "forward",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": {
|
|
"downlink": 9000,
|
|
"epoch": "golden-epoch-1",
|
|
"uplink": 8000
|
|
},
|
|
"wsPath": "<secret>#1"
|
|
}
|
|
},
|
|
"status": 200
|
|
},
|
|
"nodePatchJobs": {
|
|
"entry": [
|
|
{
|
|
"complete": {
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#5",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#2": {
|
|
"privateKey": "<rpriv>#2",
|
|
"publicKey": "<rpub>#1"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#2",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.62",
|
|
"listen_port": "<port>#2",
|
|
"tag": "ng-<nod>#2-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#2}",
|
|
"short_id": [
|
|
"<secret>#4",
|
|
"<secret>#8"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#1",
|
|
"uuid": "<uuid>#1"
|
|
},
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#2",
|
|
"uuid": "<uuid>#2"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#2-in",
|
|
"nodeId": "<nod>#2",
|
|
"protocol": "vless-reality-vision"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"server": "exit.example.com",
|
|
"server_port": "<port>#1",
|
|
"tag": "ng-<nod>#2-exit",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#5",
|
|
"leaseUntil": "<ts>",
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#2": {
|
|
"privateKey": "<rpriv>#2",
|
|
"publicKey": "<rpub>#1"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#2",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.62",
|
|
"listen_port": "<port>#2",
|
|
"tag": "ng-<nod>#2-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#2}",
|
|
"short_id": [
|
|
"<secret>#4",
|
|
"<secret>#8"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#1",
|
|
"uuid": "<uuid>#1"
|
|
},
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#2",
|
|
"uuid": "<uuid>#2"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#2-in",
|
|
"nodeId": "<nod>#2",
|
|
"protocol": "vless-reality-vision"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"server": "exit.example.com",
|
|
"server_port": "<port>#1",
|
|
"tag": "ng-<nod>#2-exit",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "running",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
}
|
|
],
|
|
"exit": [
|
|
{
|
|
"complete": {
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#6",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"kind": "node-exit",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#1",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.61",
|
|
"listen_port": "<port>#1",
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"tag": "ng-<nod>#2-exit-in",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node-exit",
|
|
"metricsTag": "ng-<nod>#2-exit-in",
|
|
"nodeId": "<nod>#2"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#2-exit-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-exit-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#2",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"job": {
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#6",
|
|
"leaseUntil": "<ts>",
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"kind": "node-exit",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#1",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.61",
|
|
"listen_port": "<port>#1",
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"tag": "ng-<nod>#2-exit-in",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node-exit",
|
|
"metricsTag": "ng-<nod>#2-exit-in",
|
|
"nodeId": "<nod>#2"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#2-exit-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-exit-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#2",
|
|
"startedAt": "<ts>",
|
|
"status": "running",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"nodesAfterPatch": {
|
|
"body": {
|
|
"nodeClients": [
|
|
{
|
|
"clientUri": "vless://<uuid>#1@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#4&type=tcp&headerType=none&flow=xtls-rprx-vision#N1-renamed",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#1",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "vless://<uuid>#2@entry.example.com:<port>#2?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#1&sid=<secret>#8&type=tcp&headerType=none&flow=xtls-rprx-vision#N1-renamed",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#2",
|
|
"id": "<ncl>#2",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "ss://<ssblob>#1@entry.example.com:<port>#3#N2",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#3",
|
|
"nodeId": "<nod>#1",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"clientUri": "vless://<uuid>#4@s3.example.com:<port>#4?encryption=none&security=reality&sni=www.amd.com&fp=chrome&pbk=<rpub>#2&sid=<secret>#10&type=tcp&headerType=none#N3",
|
|
"createdAt": "<ts>",
|
|
"customerId": "<cus>#3",
|
|
"id": "<ncl>#4",
|
|
"nodeId": "<nod>#3",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#1"
|
|
},
|
|
"autoRemoving": false,
|
|
"clientCount": 2,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": "<port>#1",
|
|
"exitPortMode": "random",
|
|
"exitProtocol": "shadowsocks-2022-aes256",
|
|
"exitReady": true,
|
|
"exitResourceId": "<res>#1",
|
|
"exitServerId": "<srv>#2",
|
|
"id": "<nod>#2",
|
|
"lastActiveAt": "<ts>",
|
|
"lastSampleAt": "<ts>",
|
|
"lastUsageAt": "<ts>",
|
|
"meteredTraffic": {
|
|
"downlink": 14000,
|
|
"uplink": 12000
|
|
},
|
|
"name": "N1-renamed",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 1,
|
|
"onlineCustomerIds": [
|
|
"<cus>#1"
|
|
],
|
|
"pendingDelete": false,
|
|
"port": "<port>#2",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality-vision",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#2",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#2",
|
|
"retiredUsageEpochs": [
|
|
"diff-epoch-1"
|
|
],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 0,
|
|
"speedAt": "<ts>",
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"status": "active",
|
|
"topology": "forward",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": {
|
|
"downlink": 9000,
|
|
"epoch": "golden-epoch-1",
|
|
"uplink": 8000
|
|
},
|
|
"wsPath": "<secret>#1"
|
|
},
|
|
{
|
|
"artifacts": {},
|
|
"autoRemoving": false,
|
|
"clientCount": 1,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#3",
|
|
"exitServerId": null,
|
|
"id": "<nod>#1",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N2",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 1,
|
|
"onlineCustomerIds": [
|
|
"<cus>#1"
|
|
],
|
|
"pendingDelete": false,
|
|
"port": "<port>#3",
|
|
"portMode": "random",
|
|
"protocol": "shadowsocks-2022-aes128",
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.tesla.com",
|
|
"resourceId": "<res>#4",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 1,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#2"
|
|
},
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#2"
|
|
},
|
|
"autoRemoving": false,
|
|
"clientCount": 1,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#5",
|
|
"exitServerId": null,
|
|
"id": "<nod>#3",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N3",
|
|
"networkMode": "ipv4",
|
|
"onlineCount": 0,
|
|
"onlineCustomerIds": [],
|
|
"pendingDelete": false,
|
|
"port": "<port>#4",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#3",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#6",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#3",
|
|
"sortIndex": 2,
|
|
"speedDownBps": 0,
|
|
"speedUpBps": 0,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#9"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"systemShape": {
|
|
"status": 200,
|
|
"body": {
|
|
"history": [
|
|
{
|
|
"at": "<ts>",
|
|
"connections": 1,
|
|
"cpu": null,
|
|
"downBps": "<num>",
|
|
"mem": "<num>",
|
|
"upBps": "<num>"
|
|
}
|
|
],
|
|
"host": {
|
|
"cpuCount": "<num>",
|
|
"cpuPercent": null,
|
|
"diskPercent": "<num>",
|
|
"diskTotal": "<num>",
|
|
"diskUsed": "<num>",
|
|
"load1": "<num>",
|
|
"memPercent": "<num>",
|
|
"memTotal": "<num>",
|
|
"memUsed": "<num>"
|
|
},
|
|
"hostUptimeSec": "<num>",
|
|
"ips": {
|
|
"ipv4": "<ip>",
|
|
"ipv6": null
|
|
},
|
|
"network": {
|
|
"connections": 1,
|
|
"customersTotal": 3,
|
|
"downBps": "<num>",
|
|
"nodesTotal": 3,
|
|
"onlineCustomers": 1,
|
|
"onlineNodes": 3,
|
|
"upBps": "<num>"
|
|
},
|
|
"panelMemBytes": "<num>",
|
|
"panelUptimeSec": "<num>",
|
|
"startedAt": "<ts>",
|
|
"today": {
|
|
"downBytes": "<num>",
|
|
"upBytes": "<num>"
|
|
},
|
|
"totals": {
|
|
"downBytes": "<num>",
|
|
"upBytes": "<num>"
|
|
},
|
|
"version": "0.6.8"
|
|
}
|
|
},
|
|
"backup": {
|
|
"body": {
|
|
"activity": [
|
|
{
|
|
"action": "update_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N1-renamed"
|
|
},
|
|
"id": "<evt>#13",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "deploy_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N3"
|
|
},
|
|
"id": "<evt>#14",
|
|
"target": "<nod>#3"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Carol",
|
|
"customerId": "<cus>#3"
|
|
},
|
|
"id": "<evt>#15",
|
|
"target": "<nod>#3"
|
|
},
|
|
{
|
|
"action": "create_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N3"
|
|
},
|
|
"id": "<evt>#16",
|
|
"target": "<nod>#3"
|
|
},
|
|
{
|
|
"action": "create_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Carol"
|
|
},
|
|
"id": "<evt>#17",
|
|
"target": "<cus>#3"
|
|
},
|
|
{
|
|
"action": "reconcile_server",
|
|
"actor": "agent:<agt>#2",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"nodes": 0
|
|
},
|
|
"id": "<evt>#18",
|
|
"target": "<srv>#3"
|
|
},
|
|
{
|
|
"action": "enroll_agent",
|
|
"actor": "agent:<agt>#2",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#19",
|
|
"target": "<srv>#3"
|
|
},
|
|
{
|
|
"action": "create_enrollment",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#20",
|
|
"target": "<srv>#3"
|
|
},
|
|
{
|
|
"action": "create_server",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "S3"
|
|
},
|
|
"id": "<evt>#21",
|
|
"target": "<srv>#3"
|
|
},
|
|
{
|
|
"action": "deploy_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N2"
|
|
},
|
|
"id": "<evt>#1",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "deploy_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N1"
|
|
},
|
|
"id": "<evt>#2",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Alice",
|
|
"customerId": "<cus>#1"
|
|
},
|
|
"id": "<evt>#3",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Bob",
|
|
"customerId": "<cus>#2"
|
|
},
|
|
"id": "<evt>#4",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "assign_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"customer": "Alice",
|
|
"customerId": "<cus>#1"
|
|
},
|
|
"id": "<evt>#5",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "create_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N2"
|
|
},
|
|
"id": "<evt>#6",
|
|
"target": "<nod>#1"
|
|
},
|
|
{
|
|
"action": "create_node",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "N1"
|
|
},
|
|
"id": "<evt>#7",
|
|
"target": "<nod>#2"
|
|
},
|
|
{
|
|
"action": "create_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Bob"
|
|
},
|
|
"id": "<evt>#8",
|
|
"target": "<cus>#2"
|
|
},
|
|
{
|
|
"action": "create_customer",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Alice"
|
|
},
|
|
"id": "<evt>#9",
|
|
"target": "<cus>#1"
|
|
},
|
|
{
|
|
"action": "reconcile_server",
|
|
"actor": "agent:<agt>#1",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"nodes": 0
|
|
},
|
|
"id": "<evt>#10",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "enroll_agent",
|
|
"actor": "agent:<agt>#1",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#11",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "create_enrollment",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#12",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "reconcile_server",
|
|
"actor": "agent:<agt>#3",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"nodes": 0
|
|
},
|
|
"id": "<evt>#22",
|
|
"target": "<srv>#1"
|
|
},
|
|
{
|
|
"action": "enroll_agent",
|
|
"actor": "agent:<agt>#3",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#23",
|
|
"target": "<srv>#1"
|
|
},
|
|
{
|
|
"action": "create_enrollment",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {},
|
|
"id": "<evt>#24",
|
|
"target": "<srv>#1"
|
|
},
|
|
{
|
|
"action": "create_server",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Exit"
|
|
},
|
|
"id": "<evt>#25",
|
|
"target": "<srv>#2"
|
|
},
|
|
{
|
|
"action": "create_server",
|
|
"actor": "admin",
|
|
"at": "<ts>",
|
|
"detail": {
|
|
"name": "Entry"
|
|
},
|
|
"id": "<evt>#26",
|
|
"target": "<srv>#1"
|
|
}
|
|
],
|
|
"agents": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"hostname": "diff-agent-entry",
|
|
"id": "<agt>#3",
|
|
"keyFingerprint": "<fingerprint>#1",
|
|
"keyHash": "<hash>#1",
|
|
"lastSeenAt": "<ts>",
|
|
"serverId": "<srv>#1",
|
|
"status": "active",
|
|
"version": "0.6.8"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"hostname": "diff-agent-exit",
|
|
"id": "<agt>#1",
|
|
"keyFingerprint": "<fingerprint>#2",
|
|
"keyHash": "<hash>#3",
|
|
"lastSeenAt": "<ts>",
|
|
"serverId": "<srv>#2",
|
|
"status": "active",
|
|
"version": "0.6.8"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"hostname": "golden-agent-s3",
|
|
"id": "<agt>#2",
|
|
"keyFingerprint": "<fingerprint>#3",
|
|
"keyHash": "<hash>#5",
|
|
"lastSeenAt": "<ts>",
|
|
"serverId": "<srv>#3",
|
|
"status": "active",
|
|
"version": "0.6.8"
|
|
}
|
|
],
|
|
"createdAt": "<ts>",
|
|
"customers": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#1",
|
|
"ipLimit": 0,
|
|
"lastOnlineAt": "<ts>",
|
|
"lastUsageAt": "<ts>",
|
|
"name": "Alice",
|
|
"notes": "",
|
|
"serverUsage": {
|
|
"srv:<srv>#1": {
|
|
"lastActiveAt": "<ts>",
|
|
"lastSampleAt": "<ts>",
|
|
"retiredUsageEpochs": [
|
|
"diff-epoch-1"
|
|
],
|
|
"speedAt": "<ts>",
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"usageCounters": {
|
|
"downlink": 6300,
|
|
"epoch": "golden-epoch-1",
|
|
"uplink": 4500
|
|
}
|
|
}
|
|
},
|
|
"status": "active",
|
|
"subscriptionToken": "<subtoken>#1",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 13800,
|
|
"usedDownlinkBytes": 8300,
|
|
"usedUplinkBytes": 5500
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 2,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#2",
|
|
"ipLimit": 5,
|
|
"name": "Bob",
|
|
"notes": "",
|
|
"status": "active",
|
|
"subscriptionToken": "<subtoken>#2",
|
|
"tags": [],
|
|
"trafficLimitBytes": 1073741824,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"deviceLimit": 0,
|
|
"expiresAt": null,
|
|
"group": "",
|
|
"id": "<cus>#3",
|
|
"ipLimit": 0,
|
|
"name": "Carol",
|
|
"notes": "",
|
|
"status": "active",
|
|
"subscriptionToken": "<subtoken>#3",
|
|
"tags": [],
|
|
"trafficLimitBytes": 0,
|
|
"updatedAt": "<ts>",
|
|
"usedBytes": 0,
|
|
"usedDownlinkBytes": 0,
|
|
"usedUplinkBytes": 0
|
|
}
|
|
],
|
|
"enrollmentTokens": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"expiresAt": "<ts>",
|
|
"id": "<enr>#1",
|
|
"serverId": "<srv>#1",
|
|
"tokenHash": "<hash>#7",
|
|
"usedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"expiresAt": "<ts>",
|
|
"id": "<enr>#2",
|
|
"serverId": "<srv>#2",
|
|
"tokenHash": "<hash>#9",
|
|
"usedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"expiresAt": "<ts>",
|
|
"id": "<enr>#3",
|
|
"serverId": "<srv>#3",
|
|
"tokenHash": "<hash>#11",
|
|
"usedAt": "<ts>"
|
|
}
|
|
],
|
|
"jobs": [
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#3",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#2": {
|
|
"privateKey": "<rpriv>#2",
|
|
"publicKey": "<rpub>#1"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#2",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.60.35",
|
|
"listen_port": "<port>#2",
|
|
"tag": "ng-<nod>#2-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#2}",
|
|
"short_id": [
|
|
"<secret>#4",
|
|
"<secret>#8"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#1",
|
|
"uuid": "<uuid>#1"
|
|
},
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#2",
|
|
"uuid": "<uuid>#2"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#2-in",
|
|
"nodeId": "<nod>#2",
|
|
"protocol": "vless-reality-vision"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"server": "exit.example.com",
|
|
"server_port": "<port>#1",
|
|
"tag": "ng-<nod>#2-exit",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#2",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"kind": "node-exit",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#1",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.60.37",
|
|
"listen_port": "<port>#1",
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"tag": "ng-<nod>#2-exit-in",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node-exit",
|
|
"metricsTag": "ng-<nod>#2-exit-in",
|
|
"nodeId": "<nod>#2"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#2-exit-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-exit-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#2",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#1",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#1",
|
|
"payload": {
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#4",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.60.35",
|
|
"listen_port": "<port>#3",
|
|
"method": "2022-blake3-aes-128-gcm",
|
|
"password": "<secret>#12",
|
|
"tag": "ng-<nod>#1-in",
|
|
"type": "shadowsocks",
|
|
"users": [
|
|
{
|
|
"name": "ng:<cus>#1",
|
|
"password": "<secret>#5"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#1-in",
|
|
"nodeId": "<nod>#1",
|
|
"protocol": "shadowsocks-2022-aes128"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#1-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#1-in"
|
|
],
|
|
"outbound": "ng-<nod>#1-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#4",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#3",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#3": {
|
|
"privateKey": "<rpriv>#1",
|
|
"publicKey": "<rpub>#2"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#6",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.63",
|
|
"listen_port": "<port>#4",
|
|
"tag": "ng-<nod>#3-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#3}",
|
|
"short_id": [
|
|
"<secret>#10"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"name": "ng:<cus>#3",
|
|
"uuid": "<uuid>#4"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#3-in",
|
|
"nodeId": "<nod>#3",
|
|
"protocol": "vless-reality"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#3-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#3-in"
|
|
],
|
|
"outbound": "ng-<nod>#3-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#3",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#5",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"keyMaterial": {
|
|
"reality-<nod>#2": {
|
|
"privateKey": "<rpriv>#2",
|
|
"publicKey": "<rpub>#1"
|
|
}
|
|
},
|
|
"kind": "node",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#2",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.62",
|
|
"listen_port": "<port>#2",
|
|
"tag": "ng-<nod>#2-in",
|
|
"tls": {
|
|
"enabled": true,
|
|
"reality": {
|
|
"enabled": true,
|
|
"handshake": {
|
|
"server": "www.amd.com",
|
|
"server_port": "<port>#5"
|
|
},
|
|
"private_key": "${REALITY_PRIVATE:reality-<nod>#2}",
|
|
"short_id": [
|
|
"<secret>#4",
|
|
"<secret>#8"
|
|
]
|
|
},
|
|
"server_name": "www.amd.com"
|
|
},
|
|
"type": "vless",
|
|
"users": [
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#1",
|
|
"uuid": "<uuid>#1"
|
|
},
|
|
{
|
|
"flow": "xtls-rprx-vision",
|
|
"name": "ng:<cus>#2",
|
|
"uuid": "<uuid>#2"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node",
|
|
"metricsTag": "ng-<nod>#2-in",
|
|
"nodeId": "<nod>#2",
|
|
"protocol": "vless-reality-vision"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"server": "exit.example.com",
|
|
"server_port": "<port>#1",
|
|
"tag": "ng-<nod>#2-exit",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#1",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"action": "apply_resource",
|
|
"attempts": 1,
|
|
"completedAt": "<ts>",
|
|
"createdAt": "<ts>",
|
|
"error": null,
|
|
"id": "<job>#6",
|
|
"leaseUntil": null,
|
|
"nodeId": "<nod>#2",
|
|
"payload": {
|
|
"kind": "node-exit",
|
|
"resource": {
|
|
"engine": "sing-box",
|
|
"id": "<res>#1",
|
|
"inbounds": [
|
|
{
|
|
"listen": "198.18.187.61",
|
|
"listen_port": "<port>#1",
|
|
"method": "2022-blake3-aes-256-gcm",
|
|
"password": "<secret>#11",
|
|
"tag": "ng-<nod>#2-exit-in",
|
|
"type": "shadowsocks"
|
|
}
|
|
],
|
|
"meta": {
|
|
"kind": "node-exit",
|
|
"metricsTag": "ng-<nod>#2-exit-in",
|
|
"nodeId": "<nod>#2"
|
|
},
|
|
"outbounds": [
|
|
{
|
|
"tag": "ng-<nod>#2-exit-direct",
|
|
"type": "direct"
|
|
}
|
|
],
|
|
"routingRules": [
|
|
{
|
|
"action": "route",
|
|
"inbound": [
|
|
"ng-<nod>#2-exit-in"
|
|
],
|
|
"outbound": "ng-<nod>#2-exit-direct"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"serverId": "<srv>#2",
|
|
"startedAt": "<ts>",
|
|
"status": "completed",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"keyStore": {
|
|
"reality-<nod>#2": {
|
|
"privateKey": "<rpriv>#2",
|
|
"publicKey": "<rpub>#1",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
"reality-<nod>#3": {
|
|
"privateKey": "<rpriv>#1",
|
|
"publicKey": "<rpub>#2",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
},
|
|
"nodeClients": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"credentials": {
|
|
"clientId": "<uuid>#1",
|
|
"relayPassword": "<secret>#3",
|
|
"shortId": "<secret>#4"
|
|
},
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#1",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"credentials": {
|
|
"clientId": "<uuid>#2",
|
|
"relayPassword": "<secret>#7",
|
|
"shortId": "<secret>#8"
|
|
},
|
|
"customerId": "<cus>#2",
|
|
"id": "<ncl>#2",
|
|
"nodeId": "<nod>#2",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"credentials": {
|
|
"clientId": "<uuid>#3",
|
|
"relayPassword": "<secret>#5",
|
|
"shortId": "<secret>#6"
|
|
},
|
|
"customerId": "<cus>#1",
|
|
"id": "<ncl>#3",
|
|
"nodeId": "<nod>#1",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"credentials": {
|
|
"clientId": "<uuid>#4",
|
|
"relayPassword": "<secret>#13",
|
|
"shortId": "<secret>#10"
|
|
},
|
|
"customerId": "<cus>#3",
|
|
"id": "<ncl>#4",
|
|
"nodeId": "<nod>#3",
|
|
"status": "active",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"nodes": [
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#1"
|
|
},
|
|
"autoRemoving": false,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitCredentials": {
|
|
"clientId": "<uuid>#5",
|
|
"password": "<secret>#11",
|
|
"socksUser": "ng_5b8dd6b991"
|
|
},
|
|
"exitPort": "<port>#1",
|
|
"exitPortMode": "random",
|
|
"exitProtocol": "shadowsocks-2022-aes256",
|
|
"exitReady": true,
|
|
"exitResourceId": "<res>#1",
|
|
"exitServerId": "<srv>#2",
|
|
"id": "<nod>#2",
|
|
"lastActiveAt": "<ts>",
|
|
"lastSampleAt": "<ts>",
|
|
"lastUsageAt": "<ts>",
|
|
"meteredTraffic": {
|
|
"downlink": 14000,
|
|
"uplink": 12000
|
|
},
|
|
"name": "N1-renamed",
|
|
"networkMode": "ipv4",
|
|
"pendingDelete": false,
|
|
"port": "<port>#2",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality-vision",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#2",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#2",
|
|
"retiredUsageEpochs": [
|
|
"diff-epoch-1"
|
|
],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 0,
|
|
"speedAt": "<ts>",
|
|
"speedDownBps": "<speed+>",
|
|
"speedUpBps": "<speed+>",
|
|
"status": "active",
|
|
"topology": "forward",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": {
|
|
"downlink": 9000,
|
|
"epoch": "golden-epoch-1",
|
|
"uplink": 8000
|
|
},
|
|
"wsPath": "<secret>#1"
|
|
},
|
|
{
|
|
"artifacts": {},
|
|
"autoRemoving": false,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#3",
|
|
"exitServerId": null,
|
|
"id": "<nod>#1",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N2",
|
|
"networkMode": "ipv4",
|
|
"pendingDelete": false,
|
|
"port": "<port>#3",
|
|
"portMode": "random",
|
|
"protocol": "shadowsocks-2022-aes128",
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.tesla.com",
|
|
"resourceId": "<res>#4",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#1",
|
|
"sortIndex": 1,
|
|
"ssServerKey": "<secret>#12",
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#2"
|
|
},
|
|
{
|
|
"artifacts": {
|
|
"realityPublicKey": "<rpub>#2"
|
|
},
|
|
"autoRemoving": false,
|
|
"createdAt": "<ts>",
|
|
"entryReady": true,
|
|
"error": null,
|
|
"exitPort": null,
|
|
"exitPortMode": null,
|
|
"exitProtocol": null,
|
|
"exitReady": false,
|
|
"exitResourceId": "<res>#5",
|
|
"exitServerId": null,
|
|
"id": "<nod>#3",
|
|
"lastUsageAt": null,
|
|
"meteredTraffic": null,
|
|
"name": "N3",
|
|
"networkMode": "ipv4",
|
|
"pendingDelete": false,
|
|
"port": "<port>#4",
|
|
"portMode": "random",
|
|
"protocol": "vless-reality",
|
|
"reality": {
|
|
"destPort": 443,
|
|
"keyId": "reality-<nod>#3",
|
|
"serverName": "www.amd.com"
|
|
},
|
|
"realityDestPort": 443,
|
|
"realityServerName": "www.amd.com",
|
|
"resourceId": "<res>#6",
|
|
"retiredUsageEpochs": [],
|
|
"serverId": "<srv>#3",
|
|
"sortIndex": 2,
|
|
"status": "active",
|
|
"topology": "direct",
|
|
"updatedAt": "<ts>",
|
|
"usageCounters": null,
|
|
"wsPath": "<secret>#9"
|
|
}
|
|
],
|
|
"observations": [],
|
|
"schemaVersion": 1,
|
|
"servers": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"engine": null,
|
|
"id": "<srv>#1",
|
|
"labels": [],
|
|
"lastSeenAt": "<ts>",
|
|
"name": "Entry",
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "entry.example.com",
|
|
"publicAddressV6": "v6.example.com",
|
|
"region": "",
|
|
"role": "relay",
|
|
"status": "online",
|
|
"system": {},
|
|
"tlsDomain": "tls.example.com",
|
|
"updatedAt": "<ts>",
|
|
"usage": {
|
|
"error": null,
|
|
"lastReportAt": "<ts>",
|
|
"sampleCount": 2
|
|
}
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"engine": null,
|
|
"id": "<srv>#2",
|
|
"labels": [],
|
|
"lastSeenAt": "<ts>",
|
|
"name": "Exit",
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "exit.example.com",
|
|
"publicAddressV6": "",
|
|
"region": "",
|
|
"role": "exit",
|
|
"status": "online",
|
|
"system": {},
|
|
"tlsDomain": "",
|
|
"updatedAt": "<ts>"
|
|
},
|
|
{
|
|
"createdAt": "<ts>",
|
|
"enabled": true,
|
|
"id": "<srv>#3",
|
|
"labels": [],
|
|
"lastSeenAt": "<ts>",
|
|
"name": "S3",
|
|
"portRangeEnd": 50000,
|
|
"portRangeStart": 20000,
|
|
"publicAddress": "s3.example.com",
|
|
"publicAddressV6": "",
|
|
"region": "",
|
|
"role": "relay",
|
|
"status": "online",
|
|
"system": {},
|
|
"tlsDomain": "",
|
|
"updatedAt": "<ts>"
|
|
}
|
|
],
|
|
"settings": {
|
|
"activityRetentionDays": 30,
|
|
"brandName": "NexusGate",
|
|
"completedJobRetentionDays": 7,
|
|
"observationTtlMinutes": 10,
|
|
"sessionHours": 12
|
|
},
|
|
"subscriptionAccess": [
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 378,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "raw",
|
|
"id": "<acc>#1",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 504,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "base64",
|
|
"id": "<acc>#2",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 736,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "clash",
|
|
"id": "<acc>#3",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1704,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "clash-smart",
|
|
"id": "<acc>#4",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1127,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "singbox",
|
|
"id": "<acc>#5",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 343,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "surge",
|
|
"id": "<acc>#6",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 736,
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#1",
|
|
"format": "auto",
|
|
"id": "<acc>#7",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "clash-verge/v2.0.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 504,
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#1",
|
|
"format": "auto",
|
|
"id": "<acc>#8",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "Mozilla/5.0 (DiffTest)"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 378,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "raw",
|
|
"id": "<acc>#9",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 504,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "base64",
|
|
"id": "<acc>#10",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 736,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "clash",
|
|
"id": "<acc>#11",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1704,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "clash-smart",
|
|
"id": "<acc>#12",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1127,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "singbox",
|
|
"id": "<acc>#13",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 343,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"format": "surge",
|
|
"id": "<acc>#14",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 736,
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#1",
|
|
"format": "auto",
|
|
"id": "<acc>#15",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "clash-verge/v2.0.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 504,
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#1",
|
|
"format": "auto",
|
|
"id": "<acc>#16",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "Mozilla/5.0 (DiffTest)"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 247,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "raw",
|
|
"id": "<acc>#17",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 332,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "base64",
|
|
"id": "<acc>#18",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 541,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "clash",
|
|
"id": "<acc>#19",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1457,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "clash-smart",
|
|
"id": "<acc>#20",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 866,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "singbox",
|
|
"id": "<acc>#21",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 0,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"format": "surge",
|
|
"id": "<acc>#22",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "没有已部署的入口节点",
|
|
"status": 503,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 541,
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#2",
|
|
"format": "auto",
|
|
"id": "<acc>#23",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "clash-verge/v2.0.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 0,
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#2",
|
|
"format": "auto",
|
|
"id": "<acc>#24",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "订阅客户端估计数超限",
|
|
"status": 429,
|
|
"userAgent": "Mozilla/5.0 (DiffTest)"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 222,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "raw",
|
|
"id": "<acc>#25",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 296,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "base64",
|
|
"id": "<acc>#26",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 509,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "clash",
|
|
"id": "<acc>#27",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 1425,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "clash-smart",
|
|
"id": "<acc>#28",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 829,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "singbox",
|
|
"id": "<acc>#29",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 0,
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"format": "surge",
|
|
"id": "<acc>#30",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "没有已部署的入口节点",
|
|
"status": 503,
|
|
"userAgent": "NexusGate-DiffTest/1.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 509,
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#3",
|
|
"format": "auto",
|
|
"id": "<acc>#31",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "clash-verge/v2.0.0"
|
|
},
|
|
{
|
|
"at": "<ts>",
|
|
"bytes": 296,
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#3",
|
|
"format": "auto",
|
|
"id": "<acc>#32",
|
|
"identityType": "user-agent",
|
|
"ip": "127.0.0.1",
|
|
"reason": "已返回",
|
|
"status": 200,
|
|
"userAgent": "Mozilla/5.0 (DiffTest)"
|
|
}
|
|
],
|
|
"subscriptionClients": [
|
|
{
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#1",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#1",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#1",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#2",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#2",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#1",
|
|
"customerId": "<cus>#3",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#2",
|
|
"customerId": "<cus>#3",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
},
|
|
{
|
|
"clientKey": "<clientkey>#3",
|
|
"customerId": "<cus>#3",
|
|
"firstSeenAt": "<ts>",
|
|
"identityType": "user-agent",
|
|
"lastSeenAt": "<ts>"
|
|
}
|
|
],
|
|
"users": [
|
|
{
|
|
"createdAt": "<ts>",
|
|
"id": "<usr>#1",
|
|
"passwordHash": "<hash>#13",
|
|
"role": "owner",
|
|
"status": "active",
|
|
"username": "admin"
|
|
}
|
|
]
|
|
},
|
|
"status": 200
|
|
},
|
|
"errors": {
|
|
"badSubscription": {
|
|
"body": "<!doctype html>\n<html lang=\"zh-CN\" data-theme=\"light\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n <meta name=\"color-scheme\" content=\"light dark\">\n <meta name=\"theme-color\" content=\"#f0f2f5\">\n <title>amo</title>\n <script>(function(){try{var t=localStorage.getItem('nexusgate-theme');if(t==='dark'){document.documentElement.setAttribute('data-theme','dark');document.querySelector('meta[name=\"theme-color\"]').content='#1a1b1f';}}catch(e){}})();</script>\n <link rel=\"stylesheet\" href=\"/styles.css?v=0.7.0\">\n</head>\n<body>\n <div id=\"login\" class=\"login-shell hidden\">\n <section class=\"login-card panel\">\n <div class=\"login-brand\">amo</div>\n <form id=\"login-form\" class=\"stack\">\n <label>登录账号<input name=\"username\" autocomplete=\"username\" required></label>\n <label>登录密码<input name=\"password\" type=\"password\" autocomplete=\"current-password\" required></label>\n <button class=\"btn primary full\" type=\"submit\">登录</button>\n </form>\n <p id=\"login-error\" class=\"form-error\"></p>\n <button class=\"theme-btn login-theme\" type=\"button\" data-theme-toggle>🌙 深色</button>\n </section>\n </div>\n\n <div id=\"app\" class=\"layout hidden\">\n <aside class=\"sider\">\n <div class=\"brand\">amo</div>\n <nav class=\"menu\" id=\"nav\">\n <a class=\"mi\" data-page=\"overview\" href=\"#overview\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M3 12l9-9 9 9\"/><path d=\"M5 10v10h14V10\"/></svg>系统状态</a>\n <a class=\"mi\" data-page=\"servers\" href=\"#servers\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"7\" rx=\"2\"/><rect x=\"3\" y=\"13\" width=\"18\" height=\"7\" rx=\"2\"/><path d=\"M7 7.5h.01M7 16.5h.01\"/></svg>服务器</a>\n <a class=\"mi\" data-page=\"customers\" href=\"#customers\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"9\" cy=\"8\" r=\"3.5\"/><path d=\"M2.5 20c.8-3.2 3.4-5 6.5-5s5.7 1.8 6.5 5\"/><path d=\"M16 4.6a3.5 3.5 0 010 6.8M21.5 20c-.6-2.6-2.2-4.2-4.5-4.8\"/></svg>客户与订阅</a>\n <a class=\"mi\" data-page=\"chains\" href=\"#chains\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"5\" cy=\"12\" r=\"2.5\"/><circle cx=\"19\" cy=\"6\" r=\"2.5\"/><circle cx=\"19\" cy=\"18\" r=\"2.5\"/><path d=\"M7.3 10.8l9.4-3.6M7.3 13.2l9.4 3.6\"/></svg>转发与节点</a>\n <a class=\"mi\" data-page=\"commands\" href=\"#commands\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M4 17l6-5-6-5M12 19h8\"/></svg>安装与命令</a>\n <a class=\"mi\" data-page=\"operations\" href=\"#operations\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19 12a7 7 0 00-.1-1.2l2-1.5-2-3.4-2.3 1a7 7 0 00-2-1.2L14.2 3h-4l-.4 2.5a7 7 0 00-2 1.2l-2.3-1-2 3.4 2 1.5A7 7 0 005 12c0 .4 0 .8.1 1.2l-2 1.5 2 3.4 2.3-1a7 7 0 002 1.2l.4 2.7h4l.4-2.5a7 7 0 002-1.2l2.3 1 2-3.4-2-1.5c.1-.4.1-.8.1-1.2z\"/></svg>设置与运维</a>\n </nav>\n <div class=\"sider-foot\"><span id=\"user-chip\"></span><span class=\"foot-right\"><span id=\"version-label\"></span><button id=\"logout\" class=\"icon-btn\" type=\"button\" data-tip=\"退出登录\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4\"/><path d=\"M16 17l5-5-5-5M21 12H9\"/></svg></button></span></div>\n </aside>\n\n <div class=\"main\">\n <header class=\"topbar\">\n <span class=\"crumb\">amo / <b id=\"page-title\">系统状态</b></span>\n <span class=\"sp\"></span>\n <input class=\"top-search\" placeholder=\"搜索服务器、客户、节点…\" disabled>\n <button class=\"theme-btn\" id=\"refresh\" type=\"button\" title=\"刷新数据\">刷新</button>\n <button class=\"theme-btn\" type=\"button\" data-theme-toggle>🌙 深色</button>\n </header>\n <main class=\"content\" id=\"content\"></main>\n </div>\n </div>\n\n <div id=\"modal-overlay\" class=\"modal-overlay hidden\">\n <section class=\"modal panel\" role=\"dialog\" aria-modal=\"true\">\n <header class=\"modal-head\"><h2 id=\"modal-title\"></h2><button type=\"button\" class=\"icon-btn\" data-close aria-label=\"关闭\" data-tip=\"关闭\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"><path d=\"M18 6L6 18M6 6l12 12\"/></svg></button></header>\n <div id=\"modal-body\" class=\"modal-body\"></div>\n </section>\n </div>\n <div id=\"float-pop\" class=\"float-pop hidden\"></div>\n <div id=\"toasts\" aria-live=\"polite\"></div>\n <script src=\"/vendor/qrcode.js?v=0.4.0\" defer></script>\n <script src=\"/app.js?v=0.7.0\" defer></script>\n</body>\n</html>\n",
|
|
"status": 200
|
|
},
|
|
"loginFailure": {
|
|
"body": {
|
|
"error": "invalid_credentials",
|
|
"message": "账号或密码不正确"
|
|
},
|
|
"status": 401
|
|
},
|
|
"missingNode": {
|
|
"body": {
|
|
"error": "not_found",
|
|
"message": "接口不存在"
|
|
},
|
|
"status": 404
|
|
},
|
|
"unauthenticated": {
|
|
"body": {
|
|
"error": "unauthorized",
|
|
"message": "请先登录"
|
|
},
|
|
"status": 401
|
|
}
|
|
}
|
|
}
|
|
}
|