@sigyl-dev/sdk
Version:
Sigyl SDK
166 lines • 6.96 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.searchMCP = searchMCP;
exports.getMCP = getMCP;
exports.getAllServers = getAllServers;
exports.getMCPUrl = getMCPUrl;
exports.semanticMCP = semanticMCP;
exports.semanticTools = semanticTools;
const axios_1 = __importDefault(require("axios"));
// Default configuration
const DEFAULT_REGISTRY_URL = 'http://localhost:3000/api/v1';
const DEFAULT_TIMEOUT = 10000;
// Create axios instance with default config
/**
* Always uses the official Sigyl registry API at https://api.sigyl.dev/api/v1
* Ignores any registryUrl passed in config.
*/
function createApiClient(config = {}) {
const registryUrl = 'https://api.sigyl.dev/api/v1';
const timeout = config.timeout || DEFAULT_TIMEOUT;
const client = axios_1.default.create({
baseURL: registryUrl,
timeout,
headers: Object.assign({ 'Content-Type': 'application/json' }, (config.apiKey && { 'Authorization': `Bearer ${config.apiKey}` }))
});
// Add response interceptor to handle API response format
client.interceptors.response.use((response) => {
// The registry API wraps responses in { success, data, message } format
if (response.data && typeof response.data === 'object' && 'success' in response.data) {
if (response.data.success) {
return response.data.data;
}
else {
throw new Error(response.data.message || response.data.error || 'API request failed');
}
}
return response.data;
}, (error) => {
var _a, _b;
if ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.message) {
throw new Error(error.response.data.message);
}
throw error;
});
return client;
}
// Helper function to validate authentication
function validateAuth(config, operation) {
if (config.requireAuth && !config.apiKey) {
throw new Error(`Authentication required for ${operation}. Please provide an API key.`);
}
}
// Helper function to validate admin permissions
function validateAdminAuth(config, operation) {
if (!config.apiKey) {
throw new Error(`Admin API key required for ${operation}. Please provide an API key with admin permissions.`);
}
}
/**
* Search for MCP servers in the registry
* Note: Search is typically public, but can be restricted if requireAuth is true
*/
function searchMCP(query_1, tags_1) {
return __awaiter(this, arguments, void 0, function* (query, tags, limit = 20, offset = 0, config = {}) {
// Validate auth if required
validateAuth(config, 'searching servers');
const client = createApiClient(config);
// Build query parameters manually to ensure proper formatting
const searchParams = new URLSearchParams();
searchParams.append('limit', limit.toString());
searchParams.append('offset', offset.toString());
if (query)
searchParams.append('q', query);
if (tags && tags.length > 0)
searchParams.append('tags', tags.join(','));
// The interceptor returns the data directly
return yield client.get(`/packages/search?${searchParams.toString()}`);
});
}
/**
* Get detailed information about a specific MCP server
* Note: Server details are typically public, but can be restricted if requireAuth is true
*/
function getMCP(name_1) {
return __awaiter(this, arguments, void 0, function* (name, config = {}) {
// Validate auth if required
validateAuth(config, 'getting server details');
const client = createApiClient(config);
if (!name || name.trim().length === 0) {
throw new Error('Server name is required');
}
// The interceptor returns the data directly
return yield client.get(`/packages/${encodeURIComponent(name)}`);
});
}
/**
* Get all servers (admin operation)
* Note: This requires admin API key with admin permissions
*/
function getAllServers() {
return __awaiter(this, arguments, void 0, function* (config = {}) {
// Admin operations always require admin authentication
validateAdminAuth(config, 'getting all servers');
const client = createApiClient(config);
// The interceptor returns the data directly
return yield client.get('/packages/admin/all');
});
}
/**
* Retrieve MCP server URL and metadata by server name
*/
function getMCPUrl(name_1) {
return __awaiter(this, arguments, void 0, function* (name, config = {}) {
const client = createApiClient(config);
try {
// TODO: Confirm endpoint on registry API
const pkg = yield client.get(`/packages/name/${encodeURIComponent(name)}`);
if (pkg && pkg.source_api_url) {
return { url: pkg.source_api_url, server: pkg };
}
return null;
}
catch (err) {
return null;
}
});
}
/**
* Semantic search for MCP servers
* @param query - user prompt or search string
* @param count - number of results to return (default 1)
*/
function semanticMCP(query_1) {
return __awaiter(this, arguments, void 0, function* (query, count = 1, config = {}) {
const client = createApiClient(config);
// TODO: Confirm endpoint on registry API
const resp = yield client.post(`/packages/semantic-search`, { query, count });
return Array.isArray(resp) ? resp : [];
});
}
/**
* Semantic search for tools across all MCP servers
* @param query - user prompt or search string
* @param count - number of results to return (default 1)
*/
function semanticTools(query_1) {
return __awaiter(this, arguments, void 0, function* (query, count = 1, config = {}) {
const client = createApiClient(config);
// TODO: Confirm endpoint on registry API
const resp = yield client.post(`/tools/semantic-search`, { query, count });
return Array.isArray(resp) ? resp : [];
});
}
//# sourceMappingURL=registry.js.map