cloudflare-image-mcp
Version:
Cloudflare Workers AI Image Generator MCP Server
54 lines • 1.89 kB
JavaScript
import { S3StorageProvider } from './providers/s3-provider.js';
export class StorageFactory {
static instance;
providers = new Map();
static getInstance() {
if (!StorageFactory.instance) {
StorageFactory.instance = new StorageFactory();
}
return StorageFactory.instance;
}
createStorage(config) {
const provider = this.createProvider(config.defaultProvider, config.providers[config.defaultProvider]);
return {
provider,
config
};
}
createProvider(type, config) {
const cacheKey = `${type}-${JSON.stringify(config)}`;
if (this.providers.has(cacheKey)) {
return this.providers.get(cacheKey);
}
let provider;
switch (type) {
case 's3':
provider = new S3StorageProvider((config || {
bucket: process.env.S3_BUCKET || 'cloudflare-image-mcp',
region: process.env.S3_REGION || 'auto',
accessKey: process.env.S3_ACCESS_KEY,
secretKey: process.env.S3_SECRET_KEY,
endpoint: process.env.S3_ENDPOINT,
cdnUrl: process.env.S3_CDN_URL
}));
break;
default:
throw new Error(`Unknown storage provider: ${type}`);
}
this.providers.set(cacheKey, provider);
return provider;
}
clearCache() {
this.providers.clear();
}
}
export function createStorage(config) {
return StorageFactory.getInstance().createStorage(config);
}
export function createS3Storage(config) {
return StorageFactory.getInstance().createProvider('s3', config || {
bucket: process.env.S3_BUCKET || 'cloudflare-image-mcp',
region: process.env.S3_REGION || 'auto'
});
}
//# sourceMappingURL=factory.js.map