diff --git a/api/client/add.js b/api/client/add.js index cb9644d..053fe56 100644 --- a/api/client/add.js +++ b/api/client/add.js @@ -1,10 +1,10 @@ -const { randomUUID } = require("crypto"); +const {randomUUID} = require("crypto"); const ins = require("../../utils/http"); const dayjs = require("dayjs"); const getCookie = require("../../auth/3xuiLogin"); module.exports = async (ctx) => { - let { id = 4, limitIp, expiryTime = 0, enable = !0, totalGB = 1, subId = "2rv0gb458kbfl532", email, uuid } = ctx.request.body; + let {id = 4, limitIp, expiryTime = 0, enable = !0, totalGB = 1, subId = "2rv0gb458kbfl532", email, uuid} = ctx.request.body; if (!ctx.state.cookie) { ctx.state.cookie = await getCookie(); ins.interceptors.request.use((config) => { @@ -13,27 +13,33 @@ module.exports = async (ctx) => { }); } const inbound = await ins.get(`/panel/api/inbounds/get/${id}`); - if (!inbound?.success) return (ctx.body = { code: "1", msg: "获取节点失败" }); + if (!inbound?.success) return (ctx.body = {code: "1", msg: "获取节点失败"}); uuid = uuid || randomUUID(); email = email || uuid.split("-")[0]; if (expiryTime != 0) { expiryTime = dayjs(expiryTime, "YYYY-MM-DD HH:mm:ss").valueOf(); } totalGB = totalGB * 1024 * 1024 * 1024; - const settings = { clients: [{ id: uuid, flow: "", email, limitIp, enable, tgId: "", subId, reset: 0, totalGB, expiryTime }] }; - const result = await ins.post("/panel/api/inbounds/addClient", { id, settings: JSON.stringify(settings) }); + const settings = {clients: [{id: uuid, flow: "", email, limitIp, enable, tgId: "", subId, reset: 0, totalGB, expiryTime}]}; + const result = await ins.post("/panel/api/inbounds/addClient", {id, settings: JSON.stringify(settings)}); if (result?.success) { - const { remark, port, protocol, streamSettings = "{}" } = inbound.obj || {}; - const { - network = "ws", - security = "none", - wsSettings: { host, path }, - } = JSON.parse(streamSettings); - ctx.body = { - code: "0", - data: `${protocol}://${uuid}@vless.jjcp52.com:${port}?type=${network}&path=${path}&host=${host}&security=${security}#${remark}-${email}`, - message: "success", - }; + const {remark, port, protocol, streamSettings = "{}"} = inbound.obj || {}; + const setting = JSON.parse(streamSettings || "{}"), {network = "ws", security = "none"} = setting; + if (network === "ws") { + const {wsSettings: {host, path}} = setting + ctx.body = { + code: "0", message: "success", + data: `${protocol}://${uuid}@vless.jjcp52.com:${port}?type=${network}&path=${path}&host=${host}&security=${security}#${remark}-${email}`, + }; + } else if (network === "tcp") { + // 生成的链接格式 vless://842f52b6-4945-46c8-89ed-165bf51123fc@206.237.11.232:34261?type=tcp&security=reality&pbk=3-yeUp9rz5KacCLJqaLt_rHUY_6EKw6tveLpVB2hxQI&fp=random&sni=yahoo.com&sid=0f7f86d03b646595&spx=%2F#temu-reality-kubbo + const {serverNames: [sni], shortIds: [sid], settings: {publicKey, fingerprint, spiderX}} = (setting.realitySettings || {}) + ctx.body = { + code: "0", message: "success", + data: `${protocol}://${uuid}@vless.jjcp52.com:${port}?type=${network}&security=${security}&pbk=${publicKey}&fp=${fingerprint}&sni=${sni}&sid=${sid}&spx=${spiderX}#${remark}-${email}`, + }; + } + } else { ctx.body = { code: 1, diff --git a/package.json b/package.json index 040faaf..283e1eb 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "main": "index.js", "scripts": { "dev": "nodemon index.js", - "build": "pkg index.js --targets=node18-win-x64,node18-linux-x64 --output=dist" + "build": "pkg index.js --targets=node18-win-x64,node18-linux-x64 --output=dist/" }, "author": "kubbo", "license": "ISC",