UNPKG

@bbigu0898/fast-swap-mcp

Version:

Fast Swap MCP Server - Supports quickly initiating token buy/sell tasks, querying transaction results, and managing take-profit/stop-loss tasks.

254 lines 9.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DbotClient = void 0; const axios_1 = __importDefault(require("axios")); class DbotClient { client; apiKey; baseUrl; constructor(apiKey, baseUrl = 'https://api-bot-v1.dbotx.com') { this.apiKey = apiKey || process.env.DBOT_API_KEY; if (!this.apiKey) { throw new Error('请设置 DBOT_API_KEY 环境变量'); } this.baseUrl = baseUrl; this.client = axios_1.default.create({ baseURL: this.baseUrl, headers: { 'X-API-KEY': this.apiKey, 'Content-Type': 'application/json', }, timeout: 30000, }); } /** * 转换请求数据为API所需的格式 */ convertRequestData(request) { const data = { chain: request.chain, pair: request.pair, walletId: request.walletId, type: request.type, customFeeAndTip: request.customFeeAndTip, priorityFee: request.priorityFee, gasFeeDelta: request.gasFeeDelta, maxFeePerGas: request.maxFeePerGas, jitoEnabled: request.jitoEnabled, jitoTip: request.jitoTip, maxSlippage: request.maxSlippage, concurrentNodes: request.concurrentNodes, retries: request.retries, amountOrPercent: request.amountOrPercent, migrateSellPercent: request.migrateSellPercent, minDevSellPercent: request.minDevSellPercent, devSellPercent: request.devSellPercent, stopEarnPercent: request.stopEarnPercent, stopLossPercent: request.stopLossPercent, pnlOrderExpireDelta: request.pnlOrderExpireDelta, pnlOrderExpireExecute: request.pnlOrderExpireExecute, pnlOrderUseMidPrice: request.pnlOrderUseMidPrice, pnlCustomConfigEnabled: request.pnlCustomConfigEnabled, }; // 处理分组设置 if (request.stopEarnGroup) { data.stopEarnGroup = request.stopEarnGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } if (request.stopLossGroup) { data.stopLossGroup = request.stopLossGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } if (request.trailingStopGroup) { data.trailingStopGroup = request.trailingStopGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } // 处理自定义配置 if (request.pnlCustomConfig) { data.pnlCustomConfig = { customFeeAndTip: request.pnlCustomConfig.customFeeAndTip, priorityFee: request.pnlCustomConfig.priorityFee, gasFeeDelta: request.pnlCustomConfig.gasFeeDelta, maxFeePerGas: request.pnlCustomConfig.maxFeePerGas, jitoEnabled: request.pnlCustomConfig.jitoEnabled, jitoTip: request.pnlCustomConfig.jitoTip, maxSlippage: request.pnlCustomConfig.maxSlippage, concurrentNodes: request.pnlCustomConfig.concurrentNodes, retries: request.pnlCustomConfig.retries, }; } return data; } /** * 转换批量请求数据为API所需的格式 */ convertBatchRequestData(request) { const data = { chain: request.chain, pair: request.pair, walletIdList: request.walletIdList, type: request.type, customFeeAndTip: request.customFeeAndTip, priorityFee: request.priorityFee, gasFeeDelta: request.gasFeeDelta, maxFeePerGas: request.maxFeePerGas, jitoEnabled: request.jitoEnabled, jitoTip: request.jitoTip, maxSlippage: request.maxSlippage, concurrentNodes: request.concurrentNodes, retries: request.retries, minAmount: request.minAmount, maxAmount: request.maxAmount, sellPercent: request.sellPercent, stopEarnPercent: request.stopEarnPercent, stopLossPercent: request.stopLossPercent, pnlOrderExpireDelta: request.pnlOrderExpireDelta, pnlOrderExpireExecute: request.pnlOrderExpireExecute, pnlOrderUseMidPrice: request.pnlOrderUseMidPrice, pnlCustomConfigEnabled: request.pnlCustomConfigEnabled, }; // 处理分组设置 if (request.stopEarnGroup) { data.stopEarnGroup = request.stopEarnGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } if (request.stopLossGroup) { data.stopLossGroup = request.stopLossGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } if (request.trailingStopGroup) { data.trailingStopGroup = request.trailingStopGroup.map(group => ({ pricePercent: group.pricePercent, amountPercent: group.amountPercent, })); } // 处理自定义配置 if (request.pnlCustomConfig) { data.pnlCustomConfig = { customFeeAndTip: request.pnlCustomConfig.customFeeAndTip, priorityFee: request.pnlCustomConfig.priorityFee, gasFeeDelta: request.pnlCustomConfig.gasFeeDelta, maxFeePerGas: request.pnlCustomConfig.maxFeePerGas, jitoEnabled: request.pnlCustomConfig.jitoEnabled, jitoTip: request.pnlCustomConfig.jitoTip, maxSlippage: request.pnlCustomConfig.maxSlippage, concurrentNodes: request.pnlCustomConfig.concurrentNodes, retries: request.pnlCustomConfig.retries, }; } return data; } /** * 创建快速买卖交易订单 */ async createFastSwap(request) { const url = '/automation/swap_order'; const data = this.convertRequestData(request); const response = await this.client.post(url, data); return response.data; } /** * 创建批量快速买卖交易订单 */ async createFastSwaps(request) { const url = '/automation/swap_orders'; const data = this.convertBatchRequestData(request); const response = await this.client.post(url, data); return response.data; } /** * 查询快速买卖订单信息 */ async getSwapOrderInfo(orderIds) { const url = '/automation/swap_orders'; const params = { ids: orderIds.join(',') }; const response = await this.client.get(url, { params }); const data = response.data; // 转换响应数据的字段名 if (data.res && Array.isArray(data.res)) { data.res = data.res.map((order) => ({ id: order.id, state: order.state, chain: order.chain, tradeType: order.tradeType || order.trade_type, txPriceUsd: order.txPriceUsd || order.tx_price_usd, swapHash: order.swapHash || order.swap_hash, errorCode: order.errorCode || order.error_code || '', errorMessage: order.errorMessage || order.error_message || '', })); } return data; } /** * 获取用户快速买卖创建的所有止盈止损任务 */ async getSwapTpslTasks(params) { const url = '/automation/pnl_orders_from_swap_order'; const response = await this.client.get(url, { params }); return response.data; } /** * 获取用户快速买卖记录 */ async getSwapRecords(params) { const url = '/account/swap_trades'; const response = await this.client.get(url, { params }); return response.data; } // --- 限价单方法 --- /** * 创建限价订单 */ async createLimitOrders(request) { const url = '/automation/limit_orders'; const response = await this.client.post(url, request); return response.data; } /** * 获取限价单列表 */ async getLimitOrders(params) { const url = '/automation/limit_orders'; const response = await this.client.get(url, { params }); return response.data; } /** * 编辑限价订单 */ async editLimitOrder(request) { const url = '/automation/limit_order'; const response = await this.client.patch(url, request); return response.data; } /** * 开/关限价订单 */ async enableLimitOrder(request) { const url = '/automation/limit_order'; const response = await this.client.patch(url, request); return response.data; } /** * 删除限价订单 */ async deleteLimitOrder(orderId) { const url = `/automation/limit_order/${orderId}`; const response = await this.client.delete(url); return response.data; } } exports.DbotClient = DbotClient; //# sourceMappingURL=client.js.map