@luxiaolei/binance-mcp
Version:
Binance Cryptocurrency Market Data MCP Service
63 lines • 1.93 kB
JavaScript
import crypto from 'crypto';
/**
* Generate HMAC SHA256 signature for Binance API requests
*/
export function generateSignature(queryString, secretKey) {
return crypto
.createHmac('sha256', secretKey)
.update(queryString)
.digest('hex');
}
/**
* Create query string from parameters object
*/
export function createQueryString(params) {
// Don't sort the keys - preserve order for signature compatibility
return Object.keys(params)
.map(key => {
const value = params[key];
if (Array.isArray(value)) {
return `${key}=${JSON.stringify(value)}`;
}
return `${key}=${value}`;
})
.join('&');
}
/**
* Create signed request parameters for authenticated endpoints
*/
export function createSignedRequest(params, secretKey, recvWindow = 5000) {
// Add timestamp and recvWindow if not present
const signedParams = {
...params,
recvWindow,
timestamp: Date.now()
};
// Create query string
const queryString = createQueryString(signedParams);
// Generate signature
const signature = generateSignature(queryString, secretKey);
return `${queryString}&signature=${signature}`;
}
/**
* Validate required environment variables
*/
export function validateApiCredentials() {
const apiKey = process.env.BINANCE_API_KEY;
const secretKey = process.env.BINANCE_SECRET_KEY;
if (!apiKey || !secretKey) {
throw new Error('Missing required environment variables: BINANCE_API_KEY and/or BINANCE_SECRET_KEY. ' +
'Please add these to your MCP configuration.');
}
return { apiKey, secretKey };
}
/**
* Get base URL for API requests
*/
export function getBaseUrl() {
const isTestnet = process.env.BINANCE_TESTNET === 'true';
return isTestnet
? 'https://testnet.binance.vision'
: 'https://api.binance.com';
}
//# sourceMappingURL=auth.js.map