@andrewlwn77/s3-upload-mcp-server
Version:
Pure Node.js MCP server for uploading images to AWS S3 with high-performance validation using Sharp and file-type
113 lines • 4.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.URLGenerationService = void 0;
const s3_client_1 = require("../infrastructure/s3-client");
const config_1 = require("../utils/config");
const logger_1 = require("../utils/logger");
class URLGenerationService {
constructor() {
this.s3Client = new s3_client_1.S3Client();
this.configManager = config_1.ConfigManager.getInstance();
this.logger = logger_1.Logger.getInstance();
}
async generatePublicUrl(bucket, key, expiration = 3600) {
try {
// Validate inputs
if (!bucket || !key) {
return {
success: false,
error: {
code: 'VALIDATION_ERROR',
message: 'Bucket and key are required'
}
};
}
// Validate expiration range
if (expiration < 300 || expiration > 604800) {
return {
success: false,
error: {
code: 'VALIDATION_ERROR',
message: 'Expiration must be between 300 seconds (5 minutes) and 604800 seconds (7 days)'
}
};
}
this.logger.info('Generating public URL', { bucket, key, expiration });
const result = await this.s3Client.generatePresignedUrl(bucket, key, expiration);
if (!result.success) {
return result;
}
this.logger.info('Public URL generated successfully', {
bucket,
key,
expiresAt: result.expires_at
});
return result;
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown URL generation error';
this.logger.error('URL generation service failed', { error: errorMessage, bucket, key });
return {
success: false,
error: {
code: 'URL_GENERATION_ERROR',
message: errorMessage
}
};
}
}
async generateUploadUrl(bucket, key, contentType, expiration = 3600) {
try {
// Validate inputs
if (!bucket || !key || !contentType) {
return {
success: false,
error: {
code: 'VALIDATION_ERROR',
message: 'Bucket, key, and contentType are required'
}
};
}
// Validate expiration range
if (expiration < 300 || expiration > 604800) {
return {
success: false,
error: {
code: 'VALIDATION_ERROR',
message: 'Expiration must be between 300 seconds (5 minutes) and 604800 seconds (7 days)'
}
};
}
this.logger.info('Generating upload URL', { bucket, key, contentType, expiration });
const result = await this.s3Client.generatePresignedUploadUrl(bucket, key, contentType, expiration);
if (!result.success) {
return result;
}
this.logger.info('Upload URL generated successfully', {
bucket,
key,
contentType,
expiresAt: result.expires_at
});
return result;
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : 'Unknown upload URL generation error';
this.logger.error('Upload URL generation service failed', {
error: errorMessage,
bucket,
key,
contentType
});
return {
success: false,
error: {
code: 'UPLOAD_URL_GENERATION_ERROR',
message: errorMessage
}
};
}
}
}
exports.URLGenerationService = URLGenerationService;
//# sourceMappingURL=url-generation-service.js.map