UNPKG

claudeus-wp-mcp

Version:

The most comprehensive WordPress MCP server - 145 production-ready tools for complete WordPress management with AI

100 lines 3.22 kB
import axios from 'axios'; import { createPaginationMeta } from '../types/index.js'; export class BaseApiClient { client; _site; constructor(site) { this._site = site; this.client = axios.create({ baseURL: `${site.url}/wp-json/wp/v2`, auth: site.authType === 'basic' ? { username: site.username, password: site.auth } : undefined, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', ...(site.authType === 'jwt' ? { 'Authorization': `Bearer ${site.auth}` } : {}) } }); // Add response interceptor for better error handling this.client.interceptors.response.use(response => response, error => { if (axios.isAxiosError(error)) { const axiosError = error; const errorMessage = axiosError.response?.data?.message || axiosError.message; const errorCode = axiosError.response?.status; throw new Error(`API Error (${errorCode}): ${errorMessage}`); } throw error; }); } get site() { return this._site; } handleError(error) { if (error.response?.data?.message) { throw new Error(`API Error: ${error.response.data.message}`); } else if (error.response?.status) { throw new Error(`HTTP Error ${error.response.status}: ${error.message}`); } else { throw new Error(`Network Error: ${error.message}`); } } async get(endpoint, params) { try { const response = await this.client.get(endpoint, { params }); return response.data; } catch (error) { this.handleError(error); } } /** * GET request with pagination metadata * Extracts X-WP-Total and X-WP-TotalPages headers */ async getPaginated(endpoint, params) { try { const response = await this.client.get(endpoint, { params }); // Extract pagination metadata from headers const pagination = createPaginationMeta(response.headers, params?.page || 1, params?.per_page || 10); return { data: response.data, pagination }; } catch (error) { this.handleError(error); } } async post(endpoint, data) { try { const response = await this.client.post(endpoint, data); return response.data; } catch (error) { this.handleError(error); } } async put(endpoint, data) { try { const response = await this.client.put(endpoint, data); return response.data; } catch (error) { this.handleError(error); } } async delete(endpoint) { try { const response = await this.client.delete(endpoint); return response.data; } catch (error) { this.handleError(error); } } } //# sourceMappingURL=base-client.js.map