mirror of
https://github.com/JetSprow/J-Board-Lite.git
synced 2026-05-01 01:14:10 +05:30
552 lines
13 KiB
YAML
552 lines
13 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: J-Board Lite API
|
|
version: 0.3.0
|
|
description: Current J-Board Lite Route Handlers. Node provisioning uses 3x-ui; the Agent API accepts latency, route trace, and Xray access log uploads.
|
|
servers:
|
|
- url: https://your-domain.com
|
|
security: []
|
|
tags:
|
|
- name: Auth
|
|
- name: Public
|
|
- name: Payment
|
|
- name: Admin
|
|
- name: Agent
|
|
- name: Subscription
|
|
- name: Wallet
|
|
- name: Support
|
|
paths:
|
|
/api/auth/register:
|
|
post:
|
|
tags: [Auth]
|
|
summary: Register a user
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/RegisterRequest'
|
|
responses:
|
|
'200':
|
|
description: Registered
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OkResponse'
|
|
'400':
|
|
description: Invalid request
|
|
/api/public/app-info:
|
|
get:
|
|
tags: [Public]
|
|
summary: Get public app settings
|
|
responses:
|
|
'200':
|
|
description: App info
|
|
/api/latency:
|
|
get:
|
|
tags: [Public]
|
|
summary: Get latest carrier latency for a node
|
|
parameters:
|
|
- $ref: '#/components/parameters/NodeId'
|
|
responses:
|
|
'200':
|
|
description: Latest latencies
|
|
/api/latency/history:
|
|
get:
|
|
tags: [Public]
|
|
summary: Get latency history for a node and carrier
|
|
parameters:
|
|
- $ref: '#/components/parameters/NodeId'
|
|
- name: carrier
|
|
in: query
|
|
required: true
|
|
schema:
|
|
$ref: '#/components/schemas/Carrier'
|
|
- name: range
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum: [1d, 7d, 30d]
|
|
responses:
|
|
'200':
|
|
description: Latency history
|
|
/api/traces:
|
|
get:
|
|
tags: [Public]
|
|
summary: Get latest route traces for a node
|
|
parameters:
|
|
- $ref: '#/components/parameters/NodeId'
|
|
responses:
|
|
'200':
|
|
description: Route traces
|
|
/api/payment/providers:
|
|
get:
|
|
tags: [Payment]
|
|
summary: List enabled payment providers
|
|
parameters:
|
|
- name: target
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum: [order, wallet]
|
|
description: Use wallet to exclude balance payment from recharge flows.
|
|
responses:
|
|
'200':
|
|
description: Providers
|
|
/api/payment/create:
|
|
post:
|
|
tags: [Payment]
|
|
summary: Create payment parameters for an order
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreatePaymentRequest'
|
|
responses:
|
|
'200':
|
|
description: Payment created
|
|
/api/payment/order/{orderId}:
|
|
get:
|
|
tags: [Payment]
|
|
summary: Get order payment state
|
|
parameters:
|
|
- name: orderId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Order state
|
|
/api/payment/query/{tradeNo}:
|
|
get:
|
|
tags: [Payment]
|
|
summary: Query payment by trade number
|
|
parameters:
|
|
- name: tradeNo
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Payment state
|
|
/api/payment/notify/{provider}:
|
|
get:
|
|
tags: [Payment]
|
|
summary: Payment provider notification callback
|
|
parameters:
|
|
- $ref: '#/components/parameters/Provider'
|
|
responses:
|
|
'200':
|
|
description: Callback handled
|
|
post:
|
|
tags: [Payment]
|
|
summary: Payment provider notification callback
|
|
parameters:
|
|
- $ref: '#/components/parameters/Provider'
|
|
responses:
|
|
'200':
|
|
description: Callback handled
|
|
/api/admin/nodes:
|
|
get:
|
|
tags: [Admin]
|
|
summary: List nodes and synced inbounds
|
|
security:
|
|
- cookieAuth: []
|
|
responses:
|
|
'200':
|
|
description: Nodes
|
|
/api/admin/nodes/{id}/inbounds:
|
|
get:
|
|
tags: [Admin]
|
|
summary: List synced inbounds for a node
|
|
security:
|
|
- cookieAuth: []
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Inbounds
|
|
/api/admin/export/config:
|
|
get:
|
|
tags: [Admin]
|
|
summary: Export configuration snapshot
|
|
security:
|
|
- cookieAuth: []
|
|
responses:
|
|
'200':
|
|
description: JSON file
|
|
/api/admin/export/audit-logs:
|
|
get:
|
|
tags: [Admin]
|
|
summary: Export audit logs
|
|
security:
|
|
- cookieAuth: []
|
|
parameters:
|
|
- name: q
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: JSON file
|
|
/api/admin/backup/database:
|
|
get:
|
|
tags: [Admin]
|
|
summary: Export SQL database backup
|
|
security:
|
|
- cookieAuth: []
|
|
responses:
|
|
'200':
|
|
description: SQL file
|
|
/api/agent/latency:
|
|
post:
|
|
tags: [Agent]
|
|
summary: Upload carrier latency results
|
|
security:
|
|
- agentToken: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/LatencyUpload'
|
|
responses:
|
|
'200':
|
|
description: Accepted
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OkResponse'
|
|
'401':
|
|
description: Invalid agent token
|
|
/api/agent/trace:
|
|
post:
|
|
tags: [Agent]
|
|
summary: Upload carrier route trace results
|
|
security:
|
|
- agentToken: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TraceUpload'
|
|
responses:
|
|
'200':
|
|
description: Accepted
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OkResponse'
|
|
'401':
|
|
description: Invalid agent token
|
|
/api/agent/node-access:
|
|
post:
|
|
tags: [Agent]
|
|
summary: Upload aggregated Xray access log events
|
|
security:
|
|
- agentToken: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NodeAccessUpload'
|
|
responses:
|
|
'200':
|
|
description: Accepted
|
|
'401':
|
|
description: Invalid agent token
|
|
/api/subscription/{id}:
|
|
get:
|
|
tags: [Subscription]
|
|
summary: Download subscription content with token
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: token
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Subscription text
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
/api/support/attachments/{id}:
|
|
get:
|
|
tags: [Support]
|
|
summary: Download or preview support attachment
|
|
security:
|
|
- cookieAuth: []
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: download
|
|
in: query
|
|
required: false
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Attachment file
|
|
/api/subscription/all:
|
|
get:
|
|
tags: [Subscription]
|
|
summary: Download aggregate subscription content
|
|
security:
|
|
- cookieAuth: []
|
|
responses:
|
|
'200':
|
|
description: Subscription text
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
/api/notifications:
|
|
get:
|
|
tags: [Subscription]
|
|
summary: List current user notifications
|
|
security:
|
|
- cookieAuth: []
|
|
responses:
|
|
'200':
|
|
description: Notifications
|
|
/api/wallet/recharge/{id}:
|
|
get:
|
|
tags: [Wallet]
|
|
summary: Get current user's wallet recharge order
|
|
security:
|
|
- cookieAuth: []
|
|
parameters:
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Recharge order
|
|
/api/wallet/recharge/payment/create:
|
|
post:
|
|
tags: [Wallet]
|
|
summary: Create external payment parameters for a wallet recharge order
|
|
security:
|
|
- cookieAuth: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateWalletRechargePaymentRequest'
|
|
responses:
|
|
'200':
|
|
description: Payment created
|
|
'400':
|
|
description: Invalid recharge or payment provider
|
|
/api/wallet/recharge/query/{tradeNo}:
|
|
get:
|
|
tags: [Wallet]
|
|
summary: Query wallet recharge payment by trade number
|
|
security:
|
|
- cookieAuth: []
|
|
parameters:
|
|
- name: tradeNo
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Recharge payment state
|
|
/api/wallet/redeem-card:
|
|
post:
|
|
tags: [Wallet]
|
|
summary: Redeem a balance or subscription recharge card
|
|
security:
|
|
- cookieAuth: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/RedeemRechargeCardRequest'
|
|
responses:
|
|
'200':
|
|
description: Redeemed
|
|
'400':
|
|
description: Invalid, used, or expired card
|
|
components:
|
|
securitySchemes:
|
|
cookieAuth:
|
|
type: apiKey
|
|
in: cookie
|
|
name: next-auth.session-token
|
|
agentToken:
|
|
type: http
|
|
scheme: bearer
|
|
parameters:
|
|
NodeId:
|
|
name: nodeId
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
Provider:
|
|
name: provider
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
schemas:
|
|
OkResponse:
|
|
type: object
|
|
properties:
|
|
ok:
|
|
type: boolean
|
|
required: [ok]
|
|
Carrier:
|
|
type: string
|
|
enum: [telecom, unicom, mobile]
|
|
RegisterRequest:
|
|
type: object
|
|
properties:
|
|
email:
|
|
type: string
|
|
format: email
|
|
password:
|
|
type: string
|
|
name:
|
|
type: string
|
|
inviteCode:
|
|
type: string
|
|
turnstileToken:
|
|
type: string
|
|
required: [email, password]
|
|
CreatePaymentRequest:
|
|
type: object
|
|
properties:
|
|
orderId:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
channel:
|
|
type: string
|
|
required: [orderId, provider]
|
|
CreateWalletRechargePaymentRequest:
|
|
type: object
|
|
properties:
|
|
rechargeId:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
channel:
|
|
type: string
|
|
required: [rechargeId, provider]
|
|
RedeemRechargeCardRequest:
|
|
type: object
|
|
properties:
|
|
code:
|
|
type: string
|
|
required: [code]
|
|
LatencyUpload:
|
|
type: object
|
|
properties:
|
|
latencies:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
carrier:
|
|
$ref: '#/components/schemas/Carrier'
|
|
latencyMs:
|
|
type: number
|
|
required: [carrier, latencyMs]
|
|
required: [latencies]
|
|
TraceHop:
|
|
type: object
|
|
additionalProperties: true
|
|
properties:
|
|
hop:
|
|
type: integer
|
|
ip:
|
|
type: string
|
|
geo:
|
|
type: string
|
|
latency:
|
|
type: number
|
|
TraceUpload:
|
|
type: object
|
|
properties:
|
|
traces:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
carrier:
|
|
$ref: '#/components/schemas/Carrier'
|
|
hops:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/TraceHop'
|
|
summary:
|
|
type: string
|
|
hopCount:
|
|
type: integer
|
|
required: [carrier, hops]
|
|
required: [traces]
|
|
NodeAccessUpload:
|
|
type: object
|
|
properties:
|
|
events:
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
clientEmail:
|
|
type: string
|
|
sourceIp:
|
|
type: string
|
|
inboundTag:
|
|
type: string
|
|
network:
|
|
type: string
|
|
enum: [tcp, udp]
|
|
targetHost:
|
|
type: string
|
|
targetPort:
|
|
type: integer
|
|
action:
|
|
type: string
|
|
connectionCount:
|
|
type: integer
|
|
uniqueTargetCount:
|
|
type: integer
|
|
firstSeenAt:
|
|
type: string
|
|
format: date-time
|
|
lastSeenAt:
|
|
type: string
|
|
format: date-time
|
|
required: [clientEmail, sourceIp, inboundTag, network, action, connectionCount, uniqueTargetCount]
|
|
required: [events]
|