پاسارگارد
نود

راهنمای API

راهنمای کامل REST API و gRPC برای نود PasarGuard

معرفی API

نود PasarGuard هم REST API و هم gRPC رو در اختیارتون میذاره تا بتونید نود، کاربرا و آماره‌ها رو مدیریت کنید.

احراز هویت

برای همه‌ی درخواست‌های API باید از API_KEY که تو فایل .env تنظیم کردید استفاده کنید.

REST API:

Authorization: Bearer <api_key>

gRPC:

authorization: Bearer <api_key>

آدرس پایه

درخواست‌های REST API باید به این آدرس فرستاده بشن:

https://your-node-address:port/

نوع محتوا

REST API از Protocol Buffers برای سریال‌سازی داده استفاده می‌کنه:

Content-Type: application/x-protobuf

ساختارهای داده

Backend

message Backend {
  BackendType type;      // نوع بکند (XRAY = 0)
  string config;         // پیکربندی بکند
  repeated User users;   // لیست کاربران
  uint64 keepAlive;      // مدت زمان keep alive به ثانیه
}

User

message User {
  string email;           // شناسه یکتای ایمیل کاربر
  Proxy proxies;          // پیکربندی‌های پروکسی
  repeated string inbounds; // لیست تگ‌های ورودی
}

StatRequest

message StatRequest {
  string name;      // ایمیل کاربر یا تگ ورودی/خروجی
  bool reset;       // بازنشانی آمار ترافیک پس از بازیابی
  StatType type;    // نوع آمار برای بازیابی
}

enum StatType {
  Outbounds = 0;   // تمام آمار خروجی
  Outbound = 1;    // آمار خروجی تکی
  Inbounds = 2;    // تمام آمار ورودی
  Inbound = 3;     // آمار ورودی تکی
  UsersStat = 4;   // تمام آمار کاربران
  UserStat = 5;    // آمار کاربر تکی
}

متدهای API

مدیریت نود

راه‌اندازی Backend

نود رو با کانفیگ موردنظر استارت بزنید.

POST /start
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: Backend (protobuf)
rpc Start(Backend) returns (BaseInfoResponse)

این تنها متدیه که قبل از برقراری ارتباط با نود صدا زده میشه.


خاموش کردن Backend

Backend رو متوقف کنید و کانکشن‌های کاربرا رو قطع کنید.

PUT /stop
Authorization: Bearer <api_key>
rpc Stop(Empty) returns (Empty)

دریافت اطلاعات پایه

اطلاعات اولیه نود رو بگیرید و وضعیت اتصال رو چک کنید.

GET /info
Authorization: Bearer <api_key>
rpc GetBaseInfo(Empty) returns (BaseInfoResponse)

پاسخ:

message BaseInfoResponse {
  string version;
  string core_type;
  bool running;
}

لاگ‌گیری

دریافت لاگ‌ها

لاگ‌های لحظه‌ای backend رو دریافت کنید.

GET /logs
Authorization: Bearer <api_key>

// Returns Server-Sent Events (SSE) stream
rpc GetLogs(Empty) returns (stream Log)

ساختار لاگ:

message Log {
  string detail;  // Log message
}

آمار و آمارگیری

دریافت آمار سیستم

آمار سطح سیستم رو دریافت کنید.

GET /stats/system
Authorization: Bearer <api_key>
rpc GetSystemStats(Empty) returns (SystemStatsResponse)

پاسخ:

message SystemStatsResponse {
  uint64 mem_total;                  // Total memory
  uint64 mem_used;                   // Used memory
  uint64 cpu_cores;                  // CPU cores
  double cpu_usage;                  // CPU usage %
  uint64 incoming_bandwidth_speed;   // Download speed
  uint64 outgoing_bandwidth_speed;   // Upload speed
}

دریافت آمار Backend

آمار اجرایی backend رو بگیرید.

GET /stats/backend
Authorization: Bearer <api_key>
rpc GetBackendStats(Empty) returns (BackendStatsResponse)

پاسخ:

message BackendStatsResponse {
  uint32 num_goroutine;    // Active goroutines
  uint32 num_gc;           // GC runs
  uint64 alloc;            // Allocated memory
  uint64 total_alloc;      // Total allocated
  uint64 sys;              // System memory
  uint64 mallocs;          // Malloc count
  uint64 frees;            // Free count
  uint64 live_objects;     // Live objects
  uint64 pause_total_ns;   // Total GC pause
  uint32 uptime;           // Uptime in seconds
}

دریافت آمار ترافیک

آمار ترافیک کاربرا، inbound یا outbound رو دریافت کنید.

GET /stats
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: StatRequest (protobuf)
rpc GetStats(StatRequest) returns (StatResponse)

مثال‌ها:

دریافت آمار همه کاربرا:

StatRequest {
  type: UsersStat,
  reset: false
}

دریافت آمار یک کاربر خاص:

StatRequest {
  name: "user@example.com",
  type: UserStat,
  reset: true  // Reset after retrieval
}

پاسخ:

message StatResponse {
  repeated Stat stats;
}

message Stat {
  string name;   // User email or tag
  string type;   // Stat type
  string link;   // Link identifier
  int64 value;   // Traffic value in bytes
}

دریافت آمار آنلاین بودن کاربر

تعداد کانکشن‌های فعال یک کاربر رو بگیرید.

GET /stats/user/online
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: StatRequest (protobuf)
rpc GetUserOnlineStats(StatRequest) returns (OnlineStatResponse)

پاسخ:

message OnlineStatResponse {
  string name;   // User email
  int64 value;   // Online connection count
}

دریافت لیست IP های آنلاین کاربر

لیست IP های کانکشن‌های فعال یک کاربر رو دریافت کنید.

GET /stats/user/online_ip
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: StatRequest (protobuf)
rpc GetUserOnlineIpListStats(StatRequest) returns (StatsOnlineIpListResponse)

مدیریت کاربرا

همگام‌سازی کاربر

یک کاربر رو اضافه، ویرایش یا حذف کنید.

PUT /user/sync
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: User (protobuf)
rpc SyncUser(stream User) returns (Empty)

برای حذف یک کاربر، یک آرایه خالی از inbounds بفرستید. gRPC یک اینترفیس stream داره، ولی REST برای هر کاربر نیاز به یک درخواست جداگانه داره.


همگام‌سازی همه کاربرا

همه کاربرا رو با یک لیست جدید جایگزین کنید.

PUT /users/sync
Authorization: Bearer <api_key>
Content-Type: application/x-protobuf

Body: Users (protobuf)
rpc SyncUsers(Users) returns (Empty)

این متد همه کاربرای قبلی رو پاک می‌کنه و با لیست جدیدی که میدید جایگزین می‌کنه.


پاسخ‌های خطا

کدهای وضعیت HTTP

کدمعنی
200موفق
400درخواست نامعتبر - داده اشتباه
401عدم احراز هویت - API_KEY نامعتبره
404پیدا نشد - endpoint وجود نداره
500خطای داخلی سرور

فرمت خطا

{
  "error": "Error description",
  "code": "ERROR_CODE"
}

محدودیت تعداد درخواست

الان محدودیت داخلی برای تعداد درخواست‌ها نیست، ولی پیشنهاد میشه:

  • تا جایی که میشه آپدیت‌های کاربرا رو دسته‌جمعی انجام بدید
  • آمارها رو به صورت محلی کش کنید
  • از درخواست‌های زیاد و مکرر خودداری کنید