mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-08 13:24:33 +00:00
Stop hand-writing OpenAPI response examples, which kept drifting from the real payloads (clients/traffic missing fields, inbounds/list exposing userId which is json:"-", the fictional inbound-443 tag instead of the real in-<port>-<transport> form).
tools/openapigen now emits frontend/src/generated/examples.ts: a per-struct example instance built from type defaults, validate oneof/min bounds, and example: struct tags, with nested-ref expansion and a cycle guard. build-openapi.mjs composes the {success,obj} envelope from it for any endpoint annotated with responseSchema (+ responseSchemaArray for lists); the hand-written response is dropped for those. Service DTOs InboundOption/ApiTokenView/ProbeResultUI are added to the walker.
#4996: client password regeneration now produces a valid Shadowsocks 2022 PSK (correct base64 length per cipher) when an SS2022 inbound is attached, in both the single and bulk client forms; backend surfaces ssMethod on /inbounds/options so the UI can pick the right length.
Also: Swagger UI persists the Authorization token across reloads (persistAuthorization).
19 lines
1.1 KiB
Go
19 lines
1.1 KiB
Go
package xray
|
|
|
|
// ClientTraffic represents traffic statistics and limits for a specific client.
|
|
// It tracks upload/download usage, expiry times, and online status for inbound clients.
|
|
type ClientTraffic struct {
|
|
Id int `json:"id" form:"id" gorm:"primaryKey;autoIncrement" example:"14825"`
|
|
InboundId int `json:"inboundId" form:"inboundId" example:"1"`
|
|
Enable bool `json:"enable" form:"enable" example:"true"`
|
|
Email string `json:"email" form:"email" gorm:"unique" example:"user1"`
|
|
UUID string `json:"uuid" form:"uuid" gorm:"-" example:"e18c9a96-71bf-48d4-933f-8b9a46d4290c"`
|
|
SubId string `json:"subId" form:"subId" gorm:"-" example:"i7tvdpeffi0hvvf1"`
|
|
Up int64 `json:"up" form:"up" example:"1048576"`
|
|
Down int64 `json:"down" form:"down" example:"2097152"`
|
|
ExpiryTime int64 `json:"expiryTime" form:"expiryTime" example:"1735689600000"`
|
|
Total int64 `json:"total" form:"total" example:"10737418240"`
|
|
Reset int `json:"reset" form:"reset" gorm:"default:0" example:"0"`
|
|
LastOnline int64 `json:"lastOnline" form:"lastOnline" gorm:"default:0" example:"1735680000000"`
|
|
}
|