bybit-mcp-server
Version:
MCP server for Bybit trading API access
172 lines • 5.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BybitClient = void 0;
const bybit_api_1 = require("bybit-api");
class BybitClient {
constructor(config) {
this.config = config;
const baseUrl = config.baseUrl || (config.environment === 'testnet'
? 'https://api-testnet.bybit.com'
: 'https://api.bybit.com');
this.client = new bybit_api_1.RestClientV5({
key: config.apiKey,
secret: config.apiSecret,
testnet: config.environment === 'testnet',
baseUrl: baseUrl,
});
}
async getPrice(symbol) {
try {
const response = await this.client.getTickers({
category: 'spot',
symbol: symbol
});
return response;
}
catch (error) {
throw new Error(`Failed to get price for ${symbol}: ${error}`);
}
}
async getOrderBook(symbol, limit = 25) {
try {
const response = await this.client.getOrderbook({
category: 'spot',
symbol: symbol,
limit: limit
});
return response;
}
catch (error) {
throw new Error(`Failed to get order book for ${symbol}: ${error}`);
}
}
async getKlines(symbol, interval, limit = 200) {
try {
const response = await this.client.getKline({
category: 'spot',
symbol: symbol,
interval: interval,
limit: limit
});
return response;
}
catch (error) {
throw new Error(`Failed to get klines for ${symbol}: ${error}`);
}
}
async get24hrTicker(symbol) {
try {
const response = await this.client.getTickers({
category: 'spot',
symbol: symbol
});
return response;
}
catch (error) {
throw new Error(`Failed to get 24hr ticker: ${error}`);
}
}
async getAccountInfo() {
try {
const response = await this.client.getWalletBalance({
accountType: 'UNIFIED'
});
return response;
}
catch (error) {
throw new Error(`Failed to get account info: ${error}`);
}
}
async getWalletBalance(accountType, coin) {
try {
const response = await this.client.getWalletBalance({
accountType: accountType,
coin: coin
});
return response;
}
catch (error) {
throw new Error(`Failed to get wallet balance: ${error}`);
}
}
async getOpenOrders(category, symbol, limit = 20) {
try {
const response = await this.client.getActiveOrders({
category: category,
symbol: symbol,
limit: limit
});
return response;
}
catch (error) {
throw new Error(`Failed to get open orders: ${error}`);
}
}
async getOrderHistory(category, symbol, limit = 20) {
try {
const response = await this.client.getHistoricOrders({
category: category,
symbol: symbol,
limit: limit
});
return response;
}
catch (error) {
throw new Error(`Failed to get order history: ${error}`);
}
}
async placeOrder(params) {
try {
if (this.config.environment === 'mainnet') {
console.error('⚠️ WARNING: Placing order on MAINNET with real funds!');
}
const response = await this.client.submitOrder({
category: params.category,
symbol: params.symbol,
side: params.side,
orderType: params.orderType,
qty: params.qty,
price: params.price,
timeInForce: params.timeInForce
});
return response;
}
catch (error) {
throw new Error(`Failed to place order: ${error}`);
}
}
async cancelOrder(category, symbol, orderId, orderLinkId) {
try {
if (this.config.environment === 'mainnet') {
console.error('⚠️ WARNING: Canceling order on MAINNET!');
}
const response = await this.client.cancelOrder({
category: category,
symbol: symbol,
orderId: orderId,
orderLinkId: orderLinkId
});
return response;
}
catch (error) {
throw new Error(`Failed to cancel order: ${error}`);
}
}
async cancelAllOrders(category, symbol) {
try {
if (this.config.environment === 'mainnet') {
console.error('⚠️ WARNING: Canceling ALL orders on MAINNET!');
}
const response = await this.client.cancelAllOrders({
category: category,
symbol: symbol
});
return response;
}
catch (error) {
throw new Error(`Failed to cancel all orders: ${error}`);
}
}
}
exports.BybitClient = BybitClient;
//# sourceMappingURL=client.js.map