sonatype-mcp
Version:
Model Context Protocol server for Sonatype Nexus Repository Manager
111 lines (110 loc) • 3.15 kB
JavaScript
/**
* Custom error class for Nexus-related errors
*/
export class NexusError extends Error {
statusCode;
nexusResponse;
constructor(message, statusCode, nexusResponse) {
super(message);
this.name = 'NexusError';
this.statusCode = statusCode;
this.nexusResponse = nexusResponse;
// Ensure proper prototype chain
Object.setPrototypeOf(this, NexusError.prototype);
}
}
/**
* Error for configuration-related issues
*/
export class ConfigurationError extends Error {
constructor(message) {
super(message);
this.name = 'ConfigurationError';
Object.setPrototypeOf(this, ConfigurationError.prototype);
}
}
/**
* Error for authentication-related issues
*/
export class AuthenticationError extends Error {
constructor(message) {
super(message);
this.name = 'AuthenticationError';
Object.setPrototypeOf(this, AuthenticationError.prototype);
}
}
/**
* Error for validation-related issues
*/
export class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
Object.setPrototypeOf(this, ValidationError.prototype);
}
}
/**
* Handle HTTP errors from Nexus API
*/
export function handleNexusError(error) {
if (error.response) {
const { status, data } = error.response;
const message = data?.message || data?.error || 'Unknown API error';
if (status === 401) {
throw new AuthenticationError(`Authentication failed: ${message}`);
}
else if (status === 403) {
throw new AuthenticationError(`Access denied: ${message}`);
}
else if (status === 404) {
throw new NexusError(`Resource not found: ${message}`, status, data);
}
else if (status >= 400 && status < 500) {
throw new ValidationError(`Client error: ${message}`);
}
else {
throw new NexusError(`Nexus API error: ${message}`, status, data);
}
}
else if (error.request) {
throw new NexusError(`Network error: Unable to connect to Nexus server`, 0);
}
else {
throw new NexusError(`Request setup error: ${error.message}`, 0);
}
}
/**
* Format error for MCP response
*/
export function formatMCPError(error) {
if (error instanceof NexusError) {
return {
code: `NEXUS_ERROR_${error.statusCode}`,
message: error.message
};
}
else if (error instanceof AuthenticationError) {
return {
code: 'AUTHENTICATION_ERROR',
message: error.message
};
}
else if (error instanceof ValidationError) {
return {
code: 'VALIDATION_ERROR',
message: error.message
};
}
else if (error instanceof ConfigurationError) {
return {
code: 'CONFIGURATION_ERROR',
message: error.message
};
}
else {
return {
code: 'UNKNOWN_ERROR',
message: error.message || 'An unknown error occurred'
};
}
}