UNPKG

3xworkaround

Version:

This is an interface for 3x-ui panel. It will help developers to create, edit and delete inbounds and clients in a simple way.

92 lines (65 loc) 4.34 kB
# 3x-ui Node.js SDK The 3x-ui is a JavaScript library designed to facilitate communication with the [3x-ui panel](https://github.com/MHSanaei/3x-ui), which runs Xray Core for proxy services. This SDK empowers JavaScript developers to create bots and websites for both commercial and non-commercial uses, providing simplicity, abstraction around the API, caching for improved performance, and mutex for asynchronous safety. This package is developed based on [MHSanaei Postman Collection](https://documenter.getpostman.com/view/16802678/2s9YkgD5jm#9cac8101-017e-4415-94e2-d30f4dcf49de) and you can check it out for more information. ### Features -**Simplicity**: Designed with simplicity in mind to streamline the process of interacting with the 3x-ui panel. -**Abstraction**: Provides an abstraction layer around the 3x-ui API to simplify finding clients by email, uuid (vmess, vless) or password (trojan). -**Proxy:** Utilizes an underlying proxy agent for communication with the panel if needed. -**Caching:** Caches responses for improved performance. -**Mutex:** Provides a mutex, a lock mechanism, to ensure asynchronous safety and prevent race conditions. -**Debug Mode:** Enables debug mode for detailed logging. -**TTL:** Allows you to set the cache time in seconds. ## Installation To install the 3x-ui SDK, use npm: ```bash npm install 3x-ui ``` ## Usage First, import the SDK: ```js import { XuiApi } from "3x-ui"; ``` Initialize the SDK with the URL of your 3x-ui panel: ```js const api = new XuiApi("http://username:password@localhost:2053"); api.debug = true; // Enables debug mode - defualt is false api.stdTTL = 60; // Cache time in seconds - default is 10s ``` Then, you can utilize the SDK functions: ```js const inbounds = await api.getInbounds(); const clientStat = await api.getClient("email or clientId"); const clientOptions = await api.getClientOptions("email or clientId"); const onlines = await api.getOnlineClients(); ``` ## Proxy The SDK uses an underlying proxy agent to connect to the panel. You can specify the proxy settings using environment variables such as HTTP_PROXY and HTTPS_PROXY. Refer to the proxy-agent [documentation](https://www.npmjs.com/package/proxy-agent) for more information. ```env HTTP_PROXY="http://proxy-server-over-tcp.com:3128" HTTPS_PROXY="https://proxy-server-over-tls.com:3129" ``` ## API ### Inbounds - `getInbounds()`: Returns an array of all inbounds. - `getInbound(id: number)`: Returns the inbound with the specified ID. - `addInbound(options: InboundOptions)`: Adds a new inbound with the provided options. - `updateInbound(id: number, options: Partial<InboundOptions>)`: Updates the inbound with the specified ID using the provided options. - `resetInboundsStat()`: Resets statistics for all inbounds. - `resetInboundStat(id: number)`: Resets statistics for the inbound with the specified ID. - `deleteInbound(id: number)`: Deletes the inbound with the specified ID. ### Clients - `getClient(clientId: string)`: Returns a client with the given `email` or `clientId`. - `getClientIps(clientId: string)`: Returns all client's IPs with the given `email` or `clientId`. - `getClientOptions(clientId: string)`: Returns all client's options with the given `email` or `clientId`. - `addClient(inboundId: number, options: ClientOptions)`: Adds a new client with the given options. - `updateClient(clientId: string, options: Partial<ClientOptions>)`: Updates a client with the given `email` or `clientId`. - `resetClientIps(clientId: string)`: Resets all client's IPs with the given `email` or `clientId`. - `resetClientStat(clientId: string)`: Resets a client's stat with the given `email` or `clientId`. - `deleteClient(clientId: string)`: Deletes a client with the given `email` or `clientId`. - `deleteDepletedClients()`: Deletes all clients that have depleted their traffic. - `deleteInboundDepletedClients(inboundId: number)`: Deletes all clients of an inbound that have depleted their traffic. - `getOnlineClients()`: Returns all online clients. ### Other Functions - `sendBackup()`: send backup file via Telegram bot. ## Example For more examples, check out [the test directory on our GitHub repository](https://github.com/mehdikhody/3x-ui-js/tree/master/tests).