2524 lines
47 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

declare namespace API {
type Ads = {
id: number;
title: string;
type: string;
content: string;
description: string;
target_url: string;
start_time: number;
end_time: number;
status: number;
created_at: number;
updated_at: number;
};
type AlipayNotifyResponse = {
return_code: string;
};
type Announcement = {
id: number;
title: string;
content: string;
show: boolean;
pinned: boolean;
popup: boolean;
created_at: number;
updated_at: number;
};
type AnyTLS = {
port: number;
security_config: SecurityConfig;
};
type Application = {
id: number;
icon: string;
name: string;
description: string;
subscribe_type: string;
};
type ApplicationPlatform = {
ios?: ApplicationVersion[];
macos?: ApplicationVersion[];
linux?: ApplicationVersion[];
android?: ApplicationVersion[];
windows?: ApplicationVersion[];
harmony?: ApplicationVersion[];
};
type ApplicationResponse = {
applications: ApplicationResponseInfo[];
};
type ApplicationResponseInfo = {
id: number;
name: string;
icon: string;
description: string;
subscribe_type: string;
platform: ApplicationPlatform;
};
type ApplicationVersion = {
id: number;
url: string;
version: string;
description: string;
is_default: boolean;
};
type AppUserSubcbribe = {
id: number;
name: string;
upload: number;
traffic: number;
download: number;
device_limit: number;
start_time: string;
expire_time: string;
list: AppUserSubscbribeNode[];
};
type AppUserSubscbribeNode = {
id: number;
name: string;
uuid: string;
protocol: string;
relay_mode: string;
relay_node: string;
server_addr: string;
speed_limit: number;
tags: string[];
traffic: number;
traffic_ratio: number;
upload: number;
config: string;
country: string;
city: string;
latitude: string;
longitude: string;
created_at: number;
download: number;
};
type AuthConfig = {
mobile: MobileAuthenticateConfig;
email: EmailAuthticateConfig;
register: PubilcRegisterConfig;
};
type AuthMethodConfig = {
id: number;
method: string;
config: Record<string, any>;
enabled: boolean;
};
type BalanceLog = {
type: number;
user_id: number;
amount: number;
order_no?: string;
balance: number;
timestamp: number;
};
type BatchDeleteCouponRequest = {
ids: number[];
};
type BatchDeleteDocumentRequest = {
ids: number[];
};
type BatchDeleteSubscribeGroupRequest = {
ids: number[];
};
type BatchDeleteSubscribeRequest = {
ids: number[];
};
type BatchDeleteUserRequest = {
ids: number[];
};
type BatchSendEmailTask = {
id: number;
subject: string;
content: string;
recipients: string;
scope: number;
register_start_time: number;
register_end_time: number;
additional: string;
scheduled: number;
interval: number;
limit: number;
status: number;
errors: string;
total: number;
current: number;
created_at: number;
updated_at: number;
};
type CheckoutOrderRequest = {
orderNo: string;
returnUrl?: string;
};
type CheckoutOrderResponse = {
type: string;
checkout_url?: string;
stripe?: StripePayment;
};
type CloseOrderRequest = {
orderNo: string;
};
type CommissionLog = {
type: number;
user_id: number;
amount: number;
order_no: string;
timestamp: number;
};
type Coupon = {
id: number;
name: string;
code: string;
count: number;
type: number;
discount: number;
start_time: number;
expire_time: number;
user_limit: number;
subscribe: number[];
used_count: number;
enable: boolean;
created_at: number;
updated_at: number;
};
type CreateAdsRequest = {
title: string;
type: string;
content: string;
description: string;
target_url: string;
start_time: number;
end_time: number;
status: number;
};
type CreateAnnouncementRequest = {
title: string;
content: string;
};
type CreateBatchSendEmailTaskRequest = {
subject: string;
content: string;
scope: number;
register_start_time?: number;
register_end_time?: number;
additional?: string;
scheduled?: number;
interval?: number;
limit?: number;
};
type CreateCouponRequest = {
name: string;
code?: string;
count?: number;
type: number;
discount: number;
start_time: number;
expire_time: number;
user_limit?: number;
subscribe?: number[];
used_count?: number;
enable?: boolean;
};
type CreateDocumentRequest = {
title: string;
content: string;
tags?: string[];
show: boolean;
};
type CreateNodeRequest = {
name: string;
tags?: string[];
port: number;
address: string;
server_id: number;
protocol: string;
enabled: boolean;
};
type CreateOrderRequest = {
user_id: number;
type: number;
quantity?: number;
price: number;
amount: number;
discount?: number;
coupon?: string;
coupon_discount?: number;
commission: number;
fee_amount: number;
payment_id: number;
trade_no?: string;
status?: number;
subscribe_id?: number;
};
type CreatePaymentMethodRequest = {
name: string;
platform: string;
description: string;
icon?: string;
domain?: string;
config: Record<string, any>;
fee_mode: number;
fee_percent?: number;
fee_amount?: number;
enable: boolean;
};
type CreateQuotaTaskRequest = {
subscribers: number[];
is_active: boolean;
start_time: number;
end_time: number;
reset_traffic: boolean;
days: number;
gift_type: number;
gift_value: number;
};
type CreateServerRequest = {
name: string;
country?: string;
city?: string;
address: string;
sort?: number;
protocols: Protocol[];
};
type CreateSubscribeApplicationRequest = {
name: string;
description?: string;
icon?: string;
scheme?: string;
user_agent: string;
is_default: boolean;
template: string;
output_format: string;
download_link: DownloadLink;
};
type CreateSubscribeGroupRequest = {
name: string;
description: string;
};
type CreateSubscribeRequest = {
name: string;
language: string;
description: string;
unit_price: number;
unit_time: string;
discount: SubscribeDiscount[];
replacement: number;
inventory: number;
traffic: number;
speed_limit: number;
device_limit: number;
quota: number;
nodes: number[];
node_tags: string[];
show: boolean;
sell: boolean;
deduction_ratio: number;
allow_deduction: boolean;
reset_cycle: number;
renewal_reset: boolean;
};
type CreateTicketFollowRequest = {
ticket_id: number;
from: string;
type: number;
content: string;
};
type CreateUserAuthMethodRequest = {
user_id: number;
auth_type: string;
auth_identifier: string;
};
type CreateUserRequest = {
email: string;
telephone: string;
telephone_area_code: string;
password: string;
product_id: number;
duration: number;
referral_percentage: number;
only_first_purchase: boolean;
referer_user: string;
refer_code: string;
balance: number;
commission: number;
gift_amount: number;
is_admin: boolean;
};
type CreateUserSubscribeRequest = {
user_id: number;
expired_at: number;
traffic: number;
subscribe_id: number;
};
type CurrencyConfig = {
access_key: string;
currency_unit: string;
currency_symbol: string;
};
type DeleteAdsRequest = {
id: number;
};
type DeleteAnnouncementRequest = {
id: number;
};
type DeleteCouponRequest = {
id: number;
};
type DeleteDocumentRequest = {
id: number;
};
type DeleteNodeRequest = {
id: number;
};
type DeletePaymentMethodRequest = {
id: number;
};
type DeleteServerRequest = {
id: number;
};
type DeleteSubscribeApplicationRequest = {
id: number;
};
type DeleteSubscribeGroupRequest = {
id: number;
};
type DeleteSubscribeRequest = {
id: number;
};
type DeleteUserAuthMethodRequest = {
user_id: number;
auth_type: string;
};
type DeleteUserDeivceRequest = {
id: number;
};
type DeleteUserParams = {
id: number;
};
type DeleteUserSubscribeRequest = {
user_subscribe_id: number;
};
type Document = {
id: number;
title: string;
content: string;
tags: string[];
show: boolean;
created_at: number;
updated_at: number;
};
type DownloadLink = {
ios?: string;
android?: string;
windows?: string;
mac?: string;
linux?: string;
harmony?: string;
};
type EmailAuthticateConfig = {
enable: boolean;
enable_verify: boolean;
enable_domain_suffix: boolean;
domain_suffix_list: string;
};
type EPayNotifyRequest = {
pid: number;
trade_no: string;
out_trade_no: string;
type: string;
name: string;
money: string;
trade_status: string;
param: string;
sign: string;
sign_type: string;
};
type FilterBalanceLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterBalanceLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterBalanceLogResponse = {
total: number;
list: BalanceLog[];
};
type FilterCommissionLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterCommissionLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterCommissionLogResponse = {
total: number;
list: CommissionLog[];
};
type FilterEmailLogParams = {
page: number;
size: number;
date?: string;
search?: string;
};
type FilterEmailLogResponse = {
total: number;
list: MessageLog[];
};
type FilterGiftLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterGiftLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterGiftLogResponse = {
total: number;
list: GiftLog[];
};
type FilterLoginLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterLoginLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterLoginLogResponse = {
total: number;
list: LoginLog[];
};
type FilterLogParams = {
page: number;
size: number;
date?: string;
search?: string;
};
type FilterMobileLogParams = {
page: number;
size: number;
date?: string;
search?: string;
};
type FilterMobileLogResponse = {
total: number;
list: MessageLog[];
};
type FilterNodeListParams = {
page: number;
size: number;
search?: string;
};
type FilterNodeListRequest = {
page: number;
size: number;
search?: string;
};
type FilterNodeListResponse = {
total: number;
list: Node[];
};
type FilterRegisterLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterRegisterLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
};
type FilterRegisterLogResponse = {
total: number;
list: RegisterLog[];
};
type FilterResetSubscribeLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_subscribe_id?: number;
};
type FilterResetSubscribeLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_subscribe_id?: number;
};
type FilterResetSubscribeLogResponse = {
total: number;
list: ResetSubscribeLog[];
};
type FilterServerListParams = {
page: number;
size: number;
search?: string;
};
type FilterServerListRequest = {
page: number;
size: number;
search?: string;
};
type FilterServerListResponse = {
total: number;
list: Server[];
};
type FilterServerTrafficLogParams = {
page: number;
size: number;
date?: string;
search?: string;
server_id?: number;
};
type FilterServerTrafficLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
server_id?: number;
};
type FilterServerTrafficLogResponse = {
total: number;
list: ServerTrafficLog[];
};
type FilterSubscribeLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
user_subscribe_id?: number;
};
type FilterSubscribeLogRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
user_subscribe_id?: number;
};
type FilterSubscribeLogResponse = {
total: number;
list: SubscribeLog[];
};
type FilterSubscribeTrafficRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
user_id?: number;
user_subscribe_id?: number;
};
type FilterSubscribeTrafficResponse = {
total: number;
list: UserSubscribeTrafficLog[];
};
type FilterTrafficLogDetailsParams = {
page: number;
size: number;
date?: string;
search?: string;
server_id?: number;
subscribe_id?: number;
user_id?: number;
};
type FilterTrafficLogDetailsRequest = {
page?: number;
size?: number;
date?: string;
search?: string;
server_id?: number;
subscribe_id?: number;
user_id?: number;
};
type FilterTrafficLogDetailsResponse = {
total: number;
list: TrafficLogDetails[];
};
type FilterUserSubscribeTrafficLogParams = {
page: number;
size: number;
date?: string;
search?: string;
user_id?: number;
user_subscribe_id?: number;
};
type Follow = {
id: number;
ticket_id: number;
from: string;
type: number;
content: string;
created_at: number;
};
type GetAdsDetailParams = {
id: number;
};
type GetAdsDetailRequest = {
id: number;
};
type GetAdsListParams = {
page: number;
size: number;
status?: number;
search?: string;
};
type GetAdsListRequest = {
page: number;
size: number;
status?: number;
search?: string;
};
type GetAdsListResponse = {
total: number;
list: Ads[];
};
type GetAnnouncementListParams = {
page: number;
size: number;
show?: boolean;
pinned?: boolean;
popup?: boolean;
search?: string;
};
type GetAnnouncementListRequest = {
page: number;
size: number;
show?: boolean;
pinned?: boolean;
popup?: boolean;
search?: string;
};
type GetAnnouncementListResponse = {
total: number;
list: Announcement[];
};
type GetAnnouncementParams = {
id: number;
};
type GetAnnouncementRequest = {
id: number;
};
type GetAuthMethodConfigParams = {
method: string;
};
type GetAuthMethodConfigRequest = {
method: string;
};
type GetAuthMethodListResponse = {
list: AuthMethodConfig[];
};
type GetAvailablePaymentMethodsResponse = {
list: PaymentMethod[];
};
type GetBatchSendEmailTaskListParams = {
page: number;
size: number;
scope?: number;
status?: number;
};
type GetBatchSendEmailTaskListRequest = {
page: number;
size: number;
scope?: number;
status?: number;
};
type GetBatchSendEmailTaskListResponse = {
total: number;
list: BatchSendEmailTask[];
};
type GetBatchSendEmailTaskStatusRequest = {
id: number;
};
type GetBatchSendEmailTaskStatusResponse = {
status: number;
current: number;
total: number;
errors: string;
};
type GetCouponListParams = {
page: number;
size: number;
subscribe?: number;
search?: string;
};
type GetCouponListRequest = {
page: number;
size: number;
subscribe?: number;
search?: string;
};
type GetCouponListResponse = {
total: number;
list: Coupon[];
};
type GetDetailRequest = {
id: number;
};
type GetDocumentDetailRequest = {
id: number;
};
type GetDocumentListParams = {
page: number;
size: number;
tag?: string;
search?: string;
};
type GetDocumentListRequest = {
page: number;
size: number;
tag?: string;
search?: string;
};
type GetDocumentListResponse = {
total: number;
list: Document[];
};
type GetMessageLogListParams = {
page: number;
size: number;
type: number;
search?: string;
};
type GetMessageLogListRequest = {
page: number;
size: number;
type: number;
search?: string;
};
type GetMessageLogListResponse = {
total: number;
list: MessageLog[];
};
type GetNodeMultiplierResponse = {
periods: TimePeriod[];
};
type GetOrderListParams = {
page: number;
size: number;
user_id?: number;
status?: number;
subscribe_id?: number;
search?: string;
};
type GetOrderListRequest = {
page: number;
size: number;
user_id?: number;
status?: number;
subscribe_id?: number;
search?: string;
};
type GetOrderListResponse = {
total: number;
list: Order[];
};
type GetPaymentMethodListParams = {
page: number;
size: number;
platform?: string;
search?: string;
enable?: boolean;
};
type GetPaymentMethodListRequest = {
page: number;
size: number;
platform?: string;
search?: string;
enable?: boolean;
};
type GetPaymentMethodListResponse = {
total: number;
list: PaymentMethodDetail[];
};
type GetPreSendEmailCountRequest = {
scope: number;
register_start_time?: number;
register_end_time?: number;
};
type GetPreSendEmailCountResponse = {
count: number;
};
type GetServerProtocolsParams = {
id: number;
};
type GetServerProtocolsRequest = {
id: number;
};
type GetServerProtocolsResponse = {
protocols: Protocol[];
};
type GetSubscribeApplicationListParams = {
page: number;
size: number;
};
type GetSubscribeApplicationListRequest = {
page: number;
size: number;
};
type GetSubscribeApplicationListResponse = {
total: number;
list: SubscribeApplication[];
};
type GetSubscribeDetailsParams = {
id: number;
};
type GetSubscribeDetailsRequest = {
id: number;
};
type GetSubscribeGroupListResponse = {
list: SubscribeGroup[];
total: number;
};
type GetSubscribeListParams = {
page: number;
size: number;
language?: string;
search?: string;
};
type GetSubscribeListRequest = {
page: number;
size: number;
language?: string;
search?: string;
};
type GetSubscribeListResponse = {
list: SubscribeItem[];
total: number;
};
type GetTicketListParams = {
page: number;
size: number;
user_id?: number;
status?: number;
search?: string;
};
type GetTicketListRequest = {
page: number;
size: number;
user_id?: number;
status?: number;
search?: string;
};
type GetTicketListResponse = {
total: number;
list: Ticket[];
};
type GetTicketParams = {
id: number;
};
type GetTicketRequest = {
id: number;
};
type GetUserAuthMethodRequest = {
user_id: number;
};
type GetUserAuthMethodResponse = {
auth_methods: UserAuthMethod[];
};
type GetUserDetailParams = {
id: number;
};
type GetUserListParams = {
page: number;
size: number;
search?: string;
user_id?: number;
subscribe_id?: number;
user_subscribe_id?: number;
};
type GetUserListRequest = {
page: number;
size: number;
search?: string;
user_id?: number;
subscribe_id?: number;
user_subscribe_id?: number;
};
type GetUserListResponse = {
total: number;
list: User[];
};
type GetUserLoginLogsParams = {
page: number;
size: number;
user_id: number;
};
type GetUserLoginLogsRequest = {
page: number;
size: number;
user_id: number;
};
type GetUserLoginLogsResponse = {
list: UserLoginLog[];
total: number;
};
type GetUserSubscribeByIdParams = {
id: number;
};
type GetUserSubscribeByIdRequest = {
id: number;
};
type GetUserSubscribeDevicesParams = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeDevicesRequest = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeDevicesResponse = {
list: UserDevice[];
total: number;
};
type GetUserSubscribeListRequest = {
page: number;
size: number;
user_id: number;
};
type GetUserSubscribeListResponse = {
list: UserSubscribe[];
total: number;
};
type GetUserSubscribeLogsParams = {
page: number;
size: number;
user_id: number;
subscribe_id?: number;
};
type GetUserSubscribeLogsRequest = {
page: number;
size: number;
user_id: number;
subscribe_id?: number;
};
type GetUserSubscribeLogsResponse = {
list: UserSubscribeLog[];
total: number;
};
type GetUserSubscribeParams = {
page: number;
size: number;
user_id: number;
};
type GetUserSubscribeResetTrafficLogsParams = {
page: number;
size: number;
user_subscribe_id: number;
};
type GetUserSubscribeResetTrafficLogsRequest = {
page: number;
size: number;
user_subscribe_id: number;
};
type GetUserSubscribeResetTrafficLogsResponse = {
list: ResetSubscribeTrafficLog[];
total: number;
};
type GetUserSubscribeTrafficLogsParams = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
start_time: number;
end_time: number;
};
type GetUserSubscribeTrafficLogsRequest = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
start_time: number;
end_time: number;
};
type GetUserSubscribeTrafficLogsResponse = {
list: TrafficLog[];
total: number;
};
type GiftLog = {
type: number;
user_id: number;
order_no: string;
subscribe_id: number;
amount: number;
balance: number;
remark?: string;
timestamp: number;
};
type HasMigrateSeverNodeResponse = {
has_migrate: boolean;
};
type Hysteria2 = {
port: number;
hop_ports: string;
hop_interval: number;
obfs_password: string;
security_config: SecurityConfig;
};
type InviteConfig = {
forced_invite: boolean;
referral_percentage: number;
only_first_purchase: boolean;
};
type KickOfflineRequest = {
id: number;
};
type LoginLog = {
user_id: number;
method: string;
login_ip: string;
user_agent: string;
success: boolean;
timestamp: number;
};
type LogResponse = {
list: Record<string, any>;
};
type LogSetting = {
auto_clear: boolean;
clear_days: number;
};
type MessageLog = {
id: number;
type: number;
platform: string;
to: string;
subject: string;
content: Record<string, any>;
status: number;
created_at: number;
};
type MigrateServerNodeResponse = {
succee: number;
fail: number;
message?: string;
};
type MobileAuthenticateConfig = {
enable: boolean;
enable_whitelist: boolean;
whitelist: string[];
};
type Node = {
id: number;
name: string;
tags: string[];
port: number;
address: string;
server_id: number;
protocol: string;
enabled: boolean;
sort?: number;
created_at: number;
updated_at: number;
};
type NodeConfig = {
node_secret: string;
node_pull_interval: number;
node_push_interval: number;
traffic_report_threshold: number;
ip_strategy: string;
dns: NodeDNS[];
block: string[];
outbound: NodeOutbound[];
};
type NodeDNS = {
proto: string;
address: string;
domains: string[];
};
type NodeOutbound = {
name: string;
protocol: string;
address: string;
port: number;
password: string;
rules: string[];
};
type NodeRelay = {
host: string;
port: number;
prefix: string;
};
type Order = {
id: number;
user_id: number;
order_no: string;
type: number;
quantity: number;
price: number;
amount: number;
gift_amount: number;
discount: number;
coupon: string;
coupon_discount: number;
commission?: number;
payment: PaymentMethod;
fee_amount: number;
trade_no: string;
status: number;
subscribe_id: number;
created_at: number;
updated_at: number;
};
type OrderDetail = {
id: number;
user_id: number;
order_no: string;
type: number;
quantity: number;
price: number;
amount: number;
gift_amount: number;
discount: number;
coupon: string;
coupon_discount: number;
commission?: number;
payment: PaymentMethod;
method: string;
fee_amount: number;
trade_no: string;
status: number;
subscribe_id: number;
subscribe: Subscribe;
created_at: number;
updated_at: number;
};
type OrdersStatistics = {
date?: string;
amount_total: number;
new_order_amount: number;
renewal_order_amount: number;
list?: OrdersStatistics[];
};
type PaymentConfig = {
id: number;
name: string;
platform: string;
description: string;
icon?: string;
domain?: string;
config: Record<string, any>;
fee_mode: number;
fee_percent?: number;
fee_amount?: number;
enable: boolean;
};
type PaymentMethod = {
id: number;
name: string;
platform: string;
description: string;
icon: string;
fee_mode: number;
fee_percent: number;
fee_amount: number;
};
type PaymentMethodDetail = {
id: number;
name: string;
platform: string;
description: string;
icon: string;
domain: string;
config: Record<string, any>;
fee_mode: number;
fee_percent: number;
fee_amount: number;
enable: boolean;
notify_url: string;
};
type PlatformInfo = {
platform: string;
platform_url: string;
platform_field_description: Record<string, any>;
};
type PlatformResponse = {
list: PlatformInfo[];
};
type PreOrderResponse = {
price: number;
amount: number;
discount: number;
gift_amount: number;
coupon: string;
coupon_discount: number;
fee_amount: number;
};
type PreRenewalOrderResponse = {
orderNo: string;
};
type PreviewSubscribeTemplateParams = {
id: number;
};
type PreviewSubscribeTemplateRequest = {
id: number;
};
type PreviewSubscribeTemplateResponse = {
/** 预览的模板内容 */
template: string;
};
type PrivacyPolicyConfig = {
privacy_policy: string;
};
type Protocol = {
type: string;
port: number;
enable: boolean;
security?: string;
sni?: string;
allow_insecure?: boolean;
fingerprint?: string;
reality_server_addr?: string;
reality_server_port?: number;
reality_private_key?: string;
reality_public_key?: string;
reality_short_id?: string;
transport?: string;
host?: string;
path?: string;
service_name?: string;
cipher?: string;
server_key?: string;
flow?: string;
hop_ports?: string;
hop_interval?: number;
obfs_password?: string;
disable_sni?: boolean;
reduce_rtt?: boolean;
udp_relay_mode?: string;
congestion_controller?: string;
/** mux, eg: off/low/medium/high */
multiplex?: string;
/** padding scheme */
padding_scheme?: string;
/** upload speed limit */
up_mbps?: number;
/** download speed limit */
down_mbps?: number;
/** obfs, 'none', 'http', 'tls' */
obfs?: string;
/** obfs host */
obfs_host?: string;
/** obfs path */
obfs_path?: string;
/** xhttp mode */
xhttp_mode?: string;
/** xhttp extra path */
xhttp_extra?: string;
/** encryption'none', 'mlkem768x25519plus' */
encryption?: string;
/** encryption mode'native', 'xorpub', 'random' */
encryption_mode?: string;
/** encryption rtt'0rtt', '1rtt' */
encryption_rtt?: string;
/** encryption ticket */
encryption_ticket?: string;
/** encryption server padding */
encryption_server_padding?: string;
/** encryption private key */
encryption_private_key?: string;
/** encryption client padding */
encryption_client_padding?: string;
/** encryption password */
encryption_password?: string;
/** Traffic ratio, default is 1 */
ratio?: number;
/** Certificate mode, `none``http``dns``self` */
cert_mode?: string;
/** DNS provider for certificate */
cert_dns_provider?: string;
/** Environment for DNS provider */
cert_dns_env?: string;
};
type PubilcRegisterConfig = {
stop_register: boolean;
enable_ip_register_limit: boolean;
ip_register_limit: number;
ip_register_limit_duration: number;
};
type PubilcVerifyCodeConfig = {
verify_code_interval: number;
};
type PurchaseOrderRequest = {
subscribe_id: number;
quantity: number;
payment?: number;
coupon?: string;
};
type PurchaseOrderResponse = {
order_no: string;
};
type QueryAnnouncementRequest = {
page: number;
size: number;
pinned: boolean;
popup: boolean;
};
type QueryAnnouncementResponse = {
total: number;
announcements: Announcement[];
};
type QueryDocumentDetailRequest = {
id: number;
};
type QueryDocumentListResponse = {
total: number;
list: Document[];
};
type QueryNodeTagResponse = {
tags: string[];
};
type QueryOrderDetailRequest = {
order_no: string;
};
type QueryOrderListRequest = {
page: number;
size: number;
};
type QueryOrderListResponse = {
total: number;
list: OrderDetail[];
};
type QueryQuotaTaskListParams = {
page: number;
size: number;
status?: number;
};
type QueryQuotaTaskListRequest = {
page: number;
size: number;
status?: number;
};
type QueryQuotaTaskListResponse = {
total: number;
list: QuotaTask[];
};
type QueryQuotaTaskPreCountRequest = {
subscribers: number[];
is_active: boolean;
start_time: number;
end_time: number;
};
type QueryQuotaTaskPreCountResponse = {
count: number;
};
type QueryQuotaTaskStatusRequest = {
id: number;
};
type QueryQuotaTaskStatusResponse = {
status: number;
current: number;
total: number;
errors: string;
};
type QuerySubscribeGroupListResponse = {
list: SubscribeGroup[];
total: number;
};
type QuerySubscribeListResponse = {
list: Subscribe[];
total: number;
};
type QueryUserAffiliateCountResponse = {
registers: number;
total_commission: number;
};
type QueryUserAffiliateListRequest = {
page: number;
size: number;
};
type QueryUserAffiliateListResponse = {
list: UserAffiliate[];
total: number;
};
type QuotaTask = {
id: number;
subscribers: number[];
is_active: boolean;
start_time: number;
end_time: number;
reset_traffic: boolean;
days: number;
gift_type: number;
gift_value: number;
/** UserSubscribe IDs */
objects: number[];
status: number;
total: number;
current: number;
errors: string;
created_at: number;
updated_at: number;
};
type RechargeOrderRequest = {
amount: number;
payment: number;
};
type RechargeOrderResponse = {
order_no: string;
};
type RegisterConfig = {
stop_register: boolean;
enable_trial: boolean;
trial_subscribe: number;
trial_time: number;
trial_time_unit: string;
enable_ip_register_limit: boolean;
ip_register_limit: number;
ip_register_limit_duration: number;
};
type RegisterLog = {
user_id: number;
auth_method: string;
identifier: string;
register_ip: string;
user_agent: string;
timestamp: number;
};
type RenewalOrderRequest = {
user_subscribe_id: number;
quantity: number;
payment: number;
coupon?: string;
};
type RenewalOrderResponse = {
order_no: string;
};
type ResetSortRequest = {
sort: SortItem[];
};
type ResetSubscribeLog = {
type: number;
user_id: number;
user_subscribe_id: number;
order_no?: string;
timestamp: number;
};
type ResetSubscribeTrafficLog = {
id: number;
type: number;
user_subscribe_id: number;
order_no?: string;
timestamp: number;
};
type ResetTrafficOrderRequest = {
user_subscribe_id: number;
payment: number;
};
type ResetTrafficOrderResponse = {
order_no: string;
};
type Response = {
/** 状态码 */
code?: number;
/** 消息 */
msg?: string;
/** 数据 */
data?: Record<string, any>;
};
type RevenueStatisticsResponse = {
today: OrdersStatistics;
monthly: OrdersStatistics;
all: OrdersStatistics;
};
type SecurityConfig = {
sni: string;
allow_insecure: boolean;
fingerprint: string;
reality_server_addr: string;
reality_server_port: number;
reality_private_key: string;
reality_public_key: string;
reality_short_id: string;
};
type Server = {
id: number;
name: string;
country: string;
city: string;
address: string;
sort: number;
protocols: Protocol[];
last_reported_at: number;
status: ServerStatus;
created_at: number;
updated_at: number;
};
type ServerGroup = {
id: number;
name: string;
description: string;
created_at: number;
updated_at: number;
};
type ServerOnlineIP = {
ip: string;
protocol: string;
};
type ServerOnlineUser = {
ip: ServerOnlineIP[];
user_id: number;
subscribe: string;
subscribe_id: number;
traffic: number;
expired_at: number;
};
type ServerRuleGroup = {
id: number;
icon: string;
name: string;
type: string;
tags: string[];
rules: string;
enable: boolean;
default: boolean;
created_at: number;
updated_at: number;
};
type ServerStatus = {
cpu: number;
mem: number;
disk: number;
protocol: string;
online: ServerOnlineUser[];
status: string;
};
type ServerTotalDataResponse = {
online_users: number;
online_servers: number;
offline_servers: number;
today_upload: number;
today_download: number;
monthly_upload: number;
monthly_download: number;
updated_at: number;
server_traffic_ranking_today: ServerTrafficData[];
server_traffic_ranking_yesterday: ServerTrafficData[];
user_traffic_ranking_today: UserTrafficData[];
user_traffic_ranking_yesterday: UserTrafficData[];
};
type ServerTrafficData = {
server_id: number;
name: string;
upload: number;
download: number;
};
type ServerTrafficLog = {
/** Server ID */
server_id: number;
/** Upload traffic in bytes */
upload: number;
/** Download traffic in bytes */
download: number;
/** Total traffic in bytes (Upload + Download) */
total: number;
/** Date in YYYY-MM-DD format */
date: string;
/** Whether to show detailed traffic */
details: boolean;
};
type SetNodeMultiplierRequest = {
periods: TimePeriod[];
};
type Shadowsocks = {
method: string;
port: number;
server_key: string;
};
type SiteConfig = {
host: string;
site_name: string;
site_desc: string;
site_logo: string;
keywords: string;
custom_html: string;
custom_data: string;
};
type SiteCustomDataContacts = {
email: string;
telephone: string;
address: string;
};
type SortItem = {
id: number;
sort: number;
};
type StopBatchSendEmailTaskRequest = {
id: number;
};
type StripePayment = {
method: string;
client_secret: string;
publishable_key: string;
};
type Subscribe = {
id: number;
name: string;
language: string;
description: string;
unit_price: number;
unit_time: string;
discount: SubscribeDiscount[];
replacement: number;
inventory: number;
traffic: number;
speed_limit: number;
device_limit: number;
quota: number;
nodes: number[];
node_tags: string[];
show: boolean;
sell: boolean;
sort: number;
deduction_ratio: number;
allow_deduction: boolean;
reset_cycle: number;
renewal_reset: boolean;
created_at: number;
updated_at: number;
};
type SubscribeApplication = {
id: number;
name: string;
description?: string;
icon?: string;
scheme?: string;
user_agent: string;
is_default: boolean;
template: string;
output_format: string;
download_link?: DownloadLink;
created_at: number;
updated_at: number;
};
type SubscribeConfig = {
single_model: boolean;
subscribe_path: string;
subscribe_domain: string;
pan_domain: boolean;
user_agent_limit: boolean;
user_agent_list: string;
};
type SubscribeDiscount = {
quantity: number;
discount: number;
};
type SubscribeGroup = {
id: number;
name: string;
description: string;
created_at: number;
updated_at: number;
};
type SubscribeItem = {
id?: number;
name?: string;
language?: string;
description?: string;
unit_price?: number;
unit_time?: string;
discount?: SubscribeDiscount[];
replacement?: number;
inventory?: number;
traffic?: number;
speed_limit?: number;
device_limit?: number;
quota?: number;
nodes?: number[];
node_tags?: string[];
show?: boolean;
sell?: boolean;
sort?: number;
deduction_ratio?: number;
allow_deduction?: boolean;
reset_cycle?: number;
renewal_reset?: boolean;
created_at?: number;
updated_at?: number;
sold: number;
};
type SubscribeLog = {
user_id: number;
token: string;
user_agent: string;
client_ip: string;
user_subscribe_id: number;
timestamp: number;
};
type SubscribeSortRequest = {
sort: SortItem[];
};
type SubscribeType = {
subscribe_types: string[];
};
type TelegramConfig = {
telegram_bot_token: string;
telegram_group_url: string;
telegram_notify: boolean;
telegram_web_hook_domain: string;
};
type TestEmailSendRequest = {
email: string;
};
type TestSmsSendRequest = {
area_code: string;
telephone: string;
};
type Ticket = {
id: number;
title: string;
description: string;
user_id: number;
follow?: Follow[];
status: number;
created_at: number;
updated_at: number;
};
type TicketWaitRelpyResponse = {
count: number;
};
type TimePeriod = {
start_time: string;
end_time: string;
multiplier: number;
};
type ToggleNodeStatusRequest = {
id: number;
enable: boolean;
};
type TosConfig = {
tos_content: string;
};
type TrafficLog = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TrafficLogDetails = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TransportConfig = {
path: string;
host: string;
service_name: string;
};
type Trojan = {
port: number;
transport: string;
transport_config: TransportConfig;
security: string;
security_config: SecurityConfig;
};
type Tuic = {
port: number;
disable_sni: boolean;
reduce_rtt: boolean;
udp_relay_mode: string;
congestion_controller: string;
security_config: SecurityConfig;
};
type UpdateAdsRequest = {
id: number;
title: string;
type: string;
content: string;
description: string;
target_url: string;
start_time: number;
end_time: number;
status: number;
};
type UpdateAnnouncementEnableRequest = {
id: number;
enable: boolean;
};
type UpdateAnnouncementRequest = {
id: number;
title: string;
content: string;
show: boolean;
pinned: boolean;
popup: boolean;
};
type UpdateAuthMethodConfigRequest = {
id: number;
method: string;
config: Record<string, any>;
enabled: boolean;
};
type UpdateCouponRequest = {
id: number;
name: string;
code?: string;
count?: number;
type: number;
discount: number;
start_time: number;
expire_time: number;
user_limit?: number;
subscribe?: number[];
used_count?: number;
enable?: boolean;
};
type UpdateDocumentRequest = {
id: number;
title: string;
content: string;
tags?: string[];
show: boolean;
};
type UpdateNodeRequest = {
id: number;
name: string;
tags?: string[];
port: number;
address: string;
server_id: number;
protocol: string;
enabled: boolean;
};
type UpdateOrderStatusRequest = {
id: number;
status: number;
payment_id?: number;
trade_no?: string;
};
type UpdatePaymentMethodRequest = {
id: number;
name: string;
platform: string;
description: string;
icon?: string;
domain?: string;
config: Record<string, any>;
fee_mode: number;
fee_percent?: number;
fee_amount?: number;
enable: boolean;
};
type UpdateServerRequest = {
id: number;
name: string;
country?: string;
city?: string;
address: string;
sort?: number;
protocols: Protocol[];
};
type UpdateSubscribeApplicationRequest = {
id: number;
name: string;
description?: string;
icon?: string;
scheme?: string;
user_agent: string;
is_default: boolean;
template: string;
output_format: string;
download_link?: DownloadLink;
};
type UpdateSubscribeGroupRequest = {
id: number;
name: string;
description: string;
};
type UpdateSubscribeRequest = {
id: number;
name: string;
language: string;
description: string;
unit_price: number;
unit_time: string;
discount: SubscribeDiscount[];
replacement: number;
inventory: number;
traffic: number;
speed_limit: number;
device_limit: number;
quota: number;
nodes: number[];
node_tags: string[];
show: boolean;
sell: boolean;
sort: number;
deduction_ratio: number;
allow_deduction: boolean;
reset_cycle: number;
renewal_reset: boolean;
};
type UpdateTicketStatusRequest = {
id: number;
status: number;
};
type UpdateUserAuthMethodRequest = {
user_id: number;
auth_type: string;
auth_identifier: string;
};
type UpdateUserBasiceInfoRequest = {
user_id: number;
password: string;
avatar: string;
balance: number;
commission: number;
referral_percentage: number;
only_first_purchase: boolean;
gift_amount: number;
telegram: number;
refer_code: string;
referer_id: number;
enable: boolean;
is_admin: boolean;
};
type UpdateUserNotifySettingRequest = {
user_id: number;
enable_balance_notify: boolean;
enable_login_notify: boolean;
enable_subscribe_notify: boolean;
enable_trade_notify: boolean;
};
type UpdateUserSubscribeRequest = {
user_subscribe_id: number;
subscribe_id: number;
traffic: number;
expired_at: number;
upload: number;
download: number;
};
type User = {
id: number;
avatar: string;
balance: number;
commission: number;
referral_percentage: number;
only_first_purchase: boolean;
gift_amount: number;
telegram: number;
refer_code: string;
referer_id: number;
enable: boolean;
is_admin?: boolean;
enable_balance_notify: boolean;
enable_login_notify: boolean;
enable_subscribe_notify: boolean;
enable_trade_notify: boolean;
auth_methods: UserAuthMethod[];
user_devices: UserDevice[];
created_at: number;
updated_at: number;
deleted_at?: number;
is_del?: boolean;
};
type UserAffiliate = {
avatar: string;
identifier: string;
registered_at: number;
enable: boolean;
};
type UserAuthMethod = {
auth_type: string;
auth_identifier: string;
verified: boolean;
};
type UserDevice = {
id: number;
ip: string;
identifier: string;
user_agent: string;
online: boolean;
enabled: boolean;
created_at: number;
updated_at: number;
};
type UserLoginLog = {
id: number;
user_id: number;
login_ip: string;
user_agent: string;
success: boolean;
timestamp: number;
};
type UserStatistics = {
date?: string;
register: number;
new_order_users: number;
renewal_order_users: number;
list?: UserStatistics[];
};
type UserStatisticsResponse = {
today: UserStatistics;
monthly: UserStatistics;
all: UserStatistics;
};
type UserSubscribe = {
id: number;
user_id: number;
order_id: number;
subscribe_id: number;
subscribe: Subscribe;
start_time: number;
expire_time: number;
finished_at: number;
reset_time: number;
traffic: number;
download: number;
upload: number;
token: string;
status: number;
created_at: number;
updated_at: number;
};
type UserSubscribeDetail = {
id: number;
user_id: number;
user: User;
order_id: number;
subscribe_id: number;
subscribe: Subscribe;
start_time: number;
expire_time: number;
reset_time: number;
traffic: number;
download: number;
upload: number;
token: string;
status: number;
created_at: number;
updated_at: number;
};
type UserSubscribeLog = {
id: number;
user_id: number;
user_subscribe_id: number;
token: string;
ip: string;
user_agent: string;
timestamp: number;
};
type UserSubscribeTrafficLog = {
/** Subscribe ID */
subscribe_id: number;
/** User ID */
user_id: number;
/** Upload traffic in bytes */
upload: number;
/** Download traffic in bytes */
download: number;
/** Total traffic in bytes (Upload + Download) */
total: number;
/** Date in YYYY-MM-DD format */
date: string;
/** Whether to show detailed traffic */
details: boolean;
};
type UserTrafficData = {
sid: number;
upload: number;
download: number;
};
type VerifyCodeConfig = {
verify_code_expire_time: number;
verify_code_limit: number;
verify_code_interval: number;
};
type VerifyConfig = {
turnstile_site_key: string;
turnstile_secret: string;
enable_login_verify: boolean;
enable_register_verify: boolean;
enable_reset_password_verify: boolean;
};
type VersionResponse = {
version: string;
};
type Vless = {
port: number;
flow: string;
transport: string;
transport_config: TransportConfig;
security: string;
security_config: SecurityConfig;
};
type Vmess = {
port: number;
transport: string;
transport_config: TransportConfig;
security: string;
security_config: SecurityConfig;
};
}