@brianveltman/sonatype-mcp
Version:
Model Context Protocol server for Sonatype Nexus Repository Manager
91 lines • 3.06 kB
JavaScript
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