UNPKG

@tuxcare-se/tuxcare-eportal-mcp

Version:

TuxCare ePortal MCP server for integrating with TuxCare ePortal API

144 lines 5.81 kB
import axios from 'axios'; import { AuthManager } from './auth.js'; export class EPortalClient { constructor(baseURL, authConfig) { this.authManager = new AuthManager(authConfig); this.client = axios.create({ baseURL: baseURL.endsWith('/') ? baseURL : `${baseURL}/`, timeout: 30000, headers: { 'Content-Type': 'application/json', ...this.authManager.getHeaders() } }); this.client.interceptors.response.use((response) => response, (error) => { if (error.response?.status === 401) { throw new Error('Authentication failed. Please check your credentials.'); } if (error.response?.status === 403) { throw new Error('Access denied. Please check your permissions.'); } if (error.response?.data?.error) { throw new Error(`API Error: ${error.response.data.error}`); } throw error; }); } // Server Management async listServers(filters = {}) { const params = new URLSearchParams(); Object.entries(filters).forEach(([key, value]) => { if (value !== undefined) { params.append(key, value.toString()); } }); const response = await this.client.get('admin/api/servers', { params }); return response.data; } async registerHost(key, hostname) { const data = new URLSearchParams(); data.append('key', key); if (hostname) { data.append('hostname', hostname); } const response = await this.client.post('admin/api/register', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); return response.data; } async unregisterHost(options) { const params = new URLSearchParams(); if (options.hostname) params.append('hostname', options.hostname); if (options.ip) params.append('ip', options.ip); if (options.server_id) params.append('server_id', options.server_id); if (params.toString() === '') { throw new Error('At least one parameter (hostname, ip, or server_id) is required'); } const response = await this.client.post('admin/api/delete_server', null, { params }); return response.data; } async bulkUnregisterHosts(checkin_age) { if (checkin_age < 1) { throw new Error('checkin_age must be greater than or equal to 1'); } const response = await this.client.delete('admin/api/servers', { params: { checkin_age } }); return response.data; } // Feed Management async listFeeds() { const response = await this.client.get('admin/api/feeds/'); return response.data; } async createOrModifyFeed(feed) { const data = new URLSearchParams(); data.append('name', feed.name); if (feed.auto !== undefined) data.append('auto', feed.auto.toString()); if (feed.deploy_after !== undefined) data.append('deploy_after', feed.deploy_after.toString()); const response = await this.client.post('admin/api/feeds/', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); return response.data; } async deleteFeed(name) { const response = await this.client.delete(`admin/api/feeds/${name}`); return response.data; } // Key Management async listKeys() { const response = await this.client.get('admin/api/keys/'); return response.data; } async createOrModifyKey(keyData) { const data = new URLSearchParams(); if (keyData.key) data.append('key', keyData.key); if (keyData.feed) data.append('feed', keyData.feed); if (keyData.note) data.append('note', keyData.note); if (keyData.server_limit !== undefined) data.append('server_limit', keyData.server_limit.toString()); const response = await this.client.post('admin/api/keys/', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); return response.data; } async deleteKey(key) { const response = await this.client.delete(`admin/api/keys/${key}`); return response.data; } // Patchset Management async listPatchsets(filters = {}) { const params = new URLSearchParams(); if (filters.feed) params.append('feed', filters.feed); if (filters.product) params.append('product', filters.product); const response = await this.client.get('admin/api/patchsets/', { params }); return response.data; } async managePatchsets(options) { const params = new URLSearchParams(); params.append('patchset', options.patchset); options.feed.forEach(feed => params.append('feed', feed)); params.append('action', options.action); if (options.product) params.append('product', options.product); const response = await this.client.post('admin/api/patchsets/manage', null, { params }); return response.data; } // User Management async listUsers() { const response = await this.client.get('admin/api/users/'); return response.data; } // Server Tagging async setTags(server_id, tags) { const params = new URLSearchParams(); params.append('server_id', server_id); if (tags) params.append('tags', tags); const response = await this.client.post('admin/api/set_tags', null, { params }); return response.data; } } //# sourceMappingURL=api-client.js.map