@nutrient-sdk/document-engine-mcp-server
Version:
MCP server for Nutrient Document Engine
47 lines (46 loc) • 2.14 kB
JavaScript
import axios from 'axios';
export class DocumentEngineError extends Error {
code;
statusCode;
details;
constructor(message, code, statusCode, details) {
super(message);
this.name = 'DocumentEngineError';
this.code = code;
this.statusCode = statusCode;
this.details = details;
}
}
export function handleApiError(error) {
if (axios.isAxiosError(error)) {
const status = error.response?.status;
const data = error.response?.data;
switch (status) {
case 400:
throw new DocumentEngineError(data?.message || 'Bad request - invalid parameters', 'BAD_REQUEST', 400, data);
case 401:
throw new DocumentEngineError('Authentication failed - check your API token', 'AUTHENTICATION_FAILED', 401, data);
case 403:
throw new DocumentEngineError('Access forbidden - insufficient permissions', 'ACCESS_FORBIDDEN', 403, data);
case 404:
throw new DocumentEngineError(data?.message || 'Resource not found', 'NOT_FOUND', 404, data);
case 409:
throw new DocumentEngineError(data?.message || 'Conflict - resource already exists or is in use', 'CONFLICT', 409, data);
case 413:
throw new DocumentEngineError('File too large - exceeds size limits', 'FILE_TOO_LARGE', 413, data);
case 429:
throw new DocumentEngineError('Rate limit exceeded - too many requests', 'RATE_LIMIT_EXCEEDED', 429, data);
case 500:
case 502:
case 503:
case 504:
throw new DocumentEngineError('Server error - please try again later', 'SERVER_ERROR', status, data);
default:
throw new DocumentEngineError(data?.message || error.message || 'Unknown API error', 'API_ERROR', status, data);
}
}
if (error instanceof Error) {
throw new DocumentEngineError(error.message, 'UNKNOWN_ERROR', undefined, error);
}
throw new DocumentEngineError('An unknown error occurred', 'UNKNOWN_ERROR');
}