UNPKG

@brianveltman/sonatype-mcp

Version:

Model Context Protocol server for Sonatype Nexus Repository Manager

91 lines 3.06 kB
import { ComponentService } from './components.js'; export class SearchService { nexusClient; componentService; constructor(nexusClient) { this.nexusClient = nexusClient; this.componentService = new ComponentService(nexusClient); } async searchComponents(params) { const response = await this.componentService.searchComponents(params); return response.items; } async searchByKeyword(keyword, repository) { const searchParams = { name: keyword, ...(repository && { repository }) }; const response = await this.componentService.searchComponents(searchParams); return response.items; } async searchVulnerabilities(repository) { const queryParams = {}; if (repository) { queryParams.repository = repository; } try { const vulnerabilities = await this.nexusClient.get('/service/rest/v1/vulnerabilities', { params: queryParams }); return vulnerabilities; } catch (error) { console.warn('Vulnerability scanning not available:', error); return []; } } async searchByChecksum(checksum, format) { const queryParams = { sha1: checksum }; if (format) { queryParams.format = format; } try { const components = await this.nexusClient.get('/service/rest/v1/search/assets', { params: queryParams }); return components; } catch (error) { console.warn('Checksum search failed:', error); return []; } } async getSearchSuggestions(query, repository) { const searchParams = { name: query, limit: 10, ...(repository && { repository }) }; const response = await this.componentService.searchComponents(searchParams); return response.items.map(item => item.name); } async searchLatestVersions(repository, format) { const searchParams = { sort: 'version', direction: 'desc', limit: 50, ...(repository && { repository }), ...(format && { format }) }; const response = await this.componentService.searchComponents(searchParams); const latestVersions = new Map(); for (const component of response.items) { const key = `${component.group || ''}:${component.name}`; if (!latestVersions.has(key)) { latestVersions.set(key, component); } } return Array.from(latestVersions.values()); } async searchByDateRange(repository) { const searchParams = { limit: 100, ...(repository && { repository }) }; const response = await this.componentService.searchComponents(searchParams); return response.items; } } //# sourceMappingURL=search.js.map