@goparrot/franchise-mcp-server
Version:
MCP Server for Franchise API
43 lines (42 loc) • 1.54 kB
JavaScript
import { getRequestHeaders, handleResponse } from '../config/index.js';
import { buildEndpoint } from './build-endpoint.js';
/**
* Generic request handler
*/
export async function makeRequest(methodInfo, config) {
const { baseUrl, args, accessToken } = config;
const pathParams = {};
const queryParams = {};
const bodyParams = { ...args };
// Extract path parameters
methodInfo.pathParams.forEach((param) => {
const value = args[param.name];
if (value !== undefined) {
pathParams[param.name] = String(value);
delete bodyParams[param.name];
}
else if (param.required) {
throw new Error(`Missing required path parameter: ${param.name}`);
}
});
// Extract query parameters
methodInfo.queryParams?.forEach((param) => {
const value = args[param.name];
if (value !== undefined) {
queryParams[param.name] = String(value);
delete args[param.name];
}
});
const endpoint = buildEndpoint(methodInfo, pathParams, queryParams);
const method = methodInfo.method.toUpperCase();
const requestOptions = {
method,
headers: getRequestHeaders(accessToken),
};
// Add body for write operations
if (['POST', 'PUT', 'PATCH'].includes(method) && Object.keys(bodyParams).length > 0) {
requestOptions.body = JSON.stringify(bodyParams);
}
const response = await fetch(`${baseUrl}${endpoint}`, requestOptions);
return handleResponse(response);
}