@chinchillaenterprises/mcp-ai-assistant
Version:
MCP server for AI assistant with ElevenLabs text-to-speech integration
99 lines • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ElevenLabsError = void 0;
exports.handleElevenLabsError = handleElevenLabsError;
exports.validateFilePath = validateFilePath;
exports.validateFileSize = validateFileSize;
exports.retryOperation = retryOperation;
exports.validateFile = validateFile;
exports.estimateCost = estimateCost;
exports.formatErrorForLogging = formatErrorForLogging;
class ElevenLabsError extends Error {
code;
statusCode;
constructor(message, code, statusCode) {
super(message);
this.code = code;
this.statusCode = statusCode;
this.name = 'ElevenLabsError';
}
}
exports.ElevenLabsError = ElevenLabsError;
function handleElevenLabsError(error) {
if (error.response) {
// API error with response
const status = error.response.status;
const message = error.response.data?.message || error.message;
switch (status) {
case 401:
return new ElevenLabsError("Invalid API key", "UNAUTHORIZED", status);
case 403:
return new ElevenLabsError("Access forbidden", "FORBIDDEN", status);
case 404:
return new ElevenLabsError("Resource not found", "NOT_FOUND", status);
case 429:
return new ElevenLabsError("Rate limit exceeded", "RATE_LIMIT", status);
case 500:
return new ElevenLabsError("ElevenLabs server error", "SERVER_ERROR", status);
default:
return new ElevenLabsError(message, "API_ERROR", status);
}
}
else if (error.request) {
// Network error
return new ElevenLabsError("Network error - unable to reach ElevenLabs API", "NETWORK_ERROR");
}
else {
// Other error
return new ElevenLabsError(error.message || "Unknown error", "UNKNOWN");
}
}
function validateFilePath(filePath) {
if (!filePath || typeof filePath !== 'string') {
throw new Error("File path is required and must be a string");
}
if (filePath.trim().length === 0) {
throw new Error("File path cannot be empty");
}
}
function validateFileSize(size) {
const MAX_SIZE = 1024 * 1024 * 1024; // 1GB
if (size > MAX_SIZE) {
throw new Error(`File size ${size} exceeds maximum limit of ${MAX_SIZE} bytes (1GB)`);
}
}
async function retryOperation(operation, maxRetries = 3, delayMs = 1000) {
let lastError;
for (let i = 0; i <= maxRetries; i++) {
try {
return await operation();
}
catch (error) {
lastError = error instanceof Error ? error : new Error(String(error));
if (i < maxRetries) {
await new Promise(resolve => setTimeout(resolve, delayMs * Math.pow(2, i)));
}
}
}
throw lastError;
}
function validateFile(filePath, size) {
validateFilePath(filePath);
if (size !== undefined) {
validateFileSize(size);
}
}
function estimateCost(durationSeconds, pricePerHour = 0.30) {
const hours = durationSeconds / 3600;
return hours * pricePerHour;
}
function formatErrorForLogging(error) {
if (error instanceof ElevenLabsError) {
return `ElevenLabsError(${error.code}): ${error.message}`;
}
if (error instanceof Error) {
return `Error: ${error.message}`;
}
return `Unknown error: ${JSON.stringify(error)}`;
}
//# sourceMappingURL=error-handler.js.map