UNPKG

fusion-mcp-cli

Version:

CLI tool for Fusion MCP Hub - Manage custom and community MCP servers. Web App: https://fusion-mcp-hub.vercel.app (General) | https://fusion-mcp-prod.isc-code-connect.dal.app.cirrus.ibm.com (IBM)

325 lines 11.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ApiClient = void 0; exports.getApiClient = getApiClient; const axios_1 = __importDefault(require("axios")); const config_1 = require("../utils/config"); const form_data_1 = __importDefault(require("form-data")); const fs = __importStar(require("fs")); const https = __importStar(require("https")); /** * API Client for Fusion MCP */ class ApiClient { constructor() { const apiUrl = (0, config_1.getApiUrl)(); const apiToken = (0, config_1.getApiToken)(); // Create HTTPS agent that accepts self-signed certificates for localhost and Cirrus environments const isLocalhost = apiUrl.includes('localhost') || apiUrl.includes('127.0.0.1'); const isCirrusEnvironment = apiUrl.includes('.cirrus.ibm.com'); const allowSelfSignedCerts = isLocalhost || isCirrusEnvironment; const httpsAgent = new https.Agent({ rejectUnauthorized: !allowSelfSignedCerts, // Allow self-signed certs for localhost and Cirrus environments }); this.client = axios_1.default.create({ baseURL: apiUrl, headers: { "Content-Type": "application/json", ...(apiToken && { Authorization: `Bearer ${apiToken}` }), }, httpsAgent, }); // Response interceptor for error handling this.client.interceptors.response.use((response) => response, (error) => { if (error.response?.status === 401) { throw new Error("Unauthorized. Please login again."); } throw error; }); } /** * Verify API token using the verify endpoint */ async verifyToken() { try { const token = (0, config_1.getApiToken)(); if (!token) { return false; } // Create HTTPS agent that accepts self-signed certificates for localhost and Cirrus environments const apiUrl = (0, config_1.getApiUrl)(); const isLocalhost = apiUrl.includes('localhost') || apiUrl.includes('127.0.0.1'); const isCirrusEnvironment = apiUrl.includes('.cirrus.ibm.com'); const allowSelfSignedCerts = isLocalhost || isCirrusEnvironment; const httpsAgent = new https.Agent({ rejectUnauthorized: !allowSelfSignedCerts, // Allow self-signed certs for localhost and Cirrus environments }); const response = await axios_1.default.post(`${apiUrl}/api/tokens/verify`, { token }, { httpsAgent, }); return response.data.success; } catch { return false; } } /** * Login with API token */ async login(apiToken, apiUrl) { try { // Create HTTPS agent that accepts self-signed certificates for localhost and Cirrus environments const url = apiUrl || (0, config_1.getApiUrl)(); const isLocalhost = url.includes('localhost') || url.includes('127.0.0.1'); const isCirrusEnvironment = url.includes('.cirrus.ibm.com'); const allowSelfSignedCerts = isLocalhost || isCirrusEnvironment; const httpsAgent = new https.Agent({ rejectUnauthorized: !allowSelfSignedCerts, // Allow self-signed certs for localhost and Cirrus environments }); const response = await axios_1.default.post(`${url}/api/tokens/verify`, { token: apiToken }, { httpsAgent, }); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * List all workspaces */ async listWorkspaces() { try { const response = await this.client.get("/api/workspaces"); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * List all custom servers */ async listServers(workspaceId) { try { const params = workspaceId ? { workspaceId } : {}; const response = await this.client.get("/api/custom-servers", { params }); return response.data; } catch (error) { if (axios_1.default.isAxiosError(error)) { return { success: false, error: error.response?.data?.error || error.message || "Failed to fetch servers", }; } return { success: false, error: error instanceof Error ? error.message : "Unknown error occurred", }; } } /** * Get server details */ async getServer(serverId) { try { const response = await this.client.get(`/api/custom-servers/${serverId}`); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * Download server package */ async downloadServer(serverId) { try { const response = await this.client.get(`/api/custom-servers/${serverId}/download`); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * Update server */ async updateServer(serverId, updates) { try { const response = await this.client.put(`/api/custom-servers/${serverId}`, updates); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * Upload server package (zip file) */ async uploadServer(serverId, zipFilePath, options) { try { const form = new form_data_1.default(); const fileStats = fs.statSync(zipFilePath); const fileSize = fileStats.size; form.append("file", fs.createReadStream(zipFilePath)); // Add version bump type (default to patch) form.append("versionBump", options?.versionBump || "patch"); // Add custom message if provided if (options?.message) { form.append("message", options.message); } let uploadedBytes = 0; const response = await this.client.post(`/api/custom-servers/${serverId}/upload`, form, { headers: { ...form.getHeaders(), }, maxContentLength: Infinity, maxBodyLength: Infinity, onUploadProgress: (progressEvent) => { if (progressEvent.total) { const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); if (options?.onProgress) { options.onProgress(percentCompleted); } } }, }); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * Rollback server to specific version */ async rollbackServer(serverId, targetVersion) { try { const response = await this.client.post(`/api/custom-servers/${serverId}/rollback`, { targetVersion }); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } /** * List all community servers */ async listCommunityServers(filters = {}) { try { const params = {}; if (filters.category) params.category = filters.category; if (filters.language) params.language = filters.language; if (filters.search) params.search = filters.search; if (filters.sortBy) params.sortBy = filters.sortBy; if (filters.limit) params.limit = filters.limit.toString(); if (filters.skip) params.skip = filters.skip.toString(); const response = await this.client.get("/api/servers", { params }); return response.data; } catch (error) { if (axios_1.default.isAxiosError(error)) { return { success: false, error: error.response?.data?.error || error.message || "Failed to fetch community servers", }; } return { success: false, error: error instanceof Error ? error.message : "Unknown error occurred", }; } } /** * Get community server details */ async getCommunityServer(serverId) { try { const response = await this.client.get(`/api/servers/${serverId}`); return response.data; } catch (error) { return { success: false, error: error.response?.data?.error || error.message, }; } } } exports.ApiClient = ApiClient; /** * Get API client instance */ function getApiClient() { return new ApiClient(); } //# sourceMappingURL=client.js.map