UNPKG

@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
"use strict"; 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