@recraft-ai/mcp-recraft-server
Version:
MCP Server implementation for recraft.ai API
59 lines (58 loc) • 2.6 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.downloadImages = exports.downloadImage = void 0;
const url_1 = require("url");
const promises_1 = require("fs/promises");
const mime_types_1 = __importDefault(require("mime-types"));
const path_1 = require("path");
const downloadImage = (imageUrl) => __awaiter(void 0, void 0, void 0, function* () {
const url = new URL(imageUrl);
let buffer;
let mimeType;
if (url.protocol === 'file:') {
const filePath = (0, url_1.fileURLToPath)(imageUrl);
buffer = yield (0, promises_1.readFile)(filePath);
mimeType = mime_types_1.default.lookup((0, path_1.extname)(filePath)) || 'image/png';
}
else {
const response = yield fetch(imageUrl);
if (!response.ok) {
throw new Error(`Failed to fetch image: ${response.statusText}, URL: ${imageUrl}`);
}
const arrayBuffer = yield response.arrayBuffer();
buffer = Buffer.from(arrayBuffer);
mimeType = response.headers.get('content-type') || 'image/png';
}
if (!['image/png', 'image/jpeg', 'image/jpg', 'image/webp', "image/svg+xml"].includes(mimeType)) {
throw new Error(`Unsupported image type: ${mimeType}`);
}
if (mimeType === 'image/svg+xml') {
return {
data: buffer.toString('utf-8'),
mimeType,
};
}
return {
data: buffer.toString('base64'),
mimeType,
};
});
exports.downloadImage = downloadImage;
const downloadImages = (imageUrls) => __awaiter(void 0, void 0, void 0, function* () {
const imagePromises = imageUrls.map(exports.downloadImage);
const images = yield Promise.all(imagePromises);
return images;
});
exports.downloadImages = downloadImages;