@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
JavaScript
;
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