@edjl/rest-mcp
Version:
REST API tools for MCP (Model Context Protocol)
72 lines • 2.76 kB
JavaScript
import axios from 'axios';
export async function makeRequest(options, authToken) {
console.error(`[Request] ${options.method} ${options.url}`);
const headers = { ...options.headers };
// Only set Content-Type for methods that have a body
if (['POST', 'PUT', 'PATCH'].includes(options.method.toUpperCase())) {
headers['Content-Type'] = options.contentType || 'application/json';
}
const config = {
url: options.url,
method: options.method,
headers,
params: options.queryParams,
validateStatus: () => true, // Accept all status codes
};
// Add authorization header if token exists and not explicitly disabled
if (authToken && !options.withoutAuthorization) {
// Check if token already includes "Bearer " prefix
if (authToken.toLowerCase().startsWith('bearer ')) {
headers['Authorization'] = authToken;
}
else {
headers['Authorization'] = `Bearer ${authToken}`;
}
}
// Update config headers
config.headers = headers;
// Add body for methods that support it
if (['POST', 'PUT', 'PATCH'].includes(options.method.toUpperCase()) && options.body) {
config.data = options.body;
}
try {
const response = await axios(config);
// Convert headers to plain object
const headers = {};
Object.entries(response.headers).forEach(([key, value]) => {
if (typeof value === 'string') {
headers[key] = value;
}
});
console.error(`[Response] Status: ${response.status} ${response.statusText}`);
return {
data: response.data,
status: response.status,
statusText: response.statusText,
headers,
};
}
catch (error) {
console.error(`[Request Error]`, error.message);
// Even network errors should return a structured response
if (error.response) {
const headers = {};
Object.entries(error.response.headers || {}).forEach(([key, value]) => {
if (typeof value === 'string') {
headers[key] = value;
}
});
console.error(`[Error Response] Status: ${error.response.status} ${error.response.statusText}`);
return {
data: error.response.data,
status: error.response.status,
statusText: error.response.statusText,
headers,
};
}
// Network error or other issue
console.error(`[Network Error] ${error.message}`);
throw new Error(`Request failed: ${error.message}`);
}
}
//# sourceMappingURL=request.js.map